素数相关算法

1.素性测试

//素性测试o(sqrt(n))

1 int is_prime(int n)
2 {
3     for(int i=2;i*i<=n;i++){
4         if(n%i==0) return 0;
5     }
6     return n!=1;
7 }

//约束枚举o(sqrt(n))

 1 vector<int>  divisor(int n) {
 2     vector<int> res;
 3     for(int i=2;i*i<=n;i++) {
 4         if(n%i==0) {
 5             res.push_back(i);
 6             if(i!=n/i) res.push_back(n/i);
 7         }
 8     }
 9
10     return res;
11 }

//整数分解o(sqrt(n))

 1 map<int,int> prime_factor(int n)
 2 {
 3     map<int,int> res;
 4     for(int i=2;i*i<=n;i++) {
 5         while(n%i==0) {
 6             res[i]++;
 7             n/=i;
 8         }
 9     }
10     if(n!=1) res[n]=1;
11     return res;
12 }

2.埃式筛法 o(nloglogn)

 1 int sieve(int n)
 2 {
 3     int p=0;
 4     clr(is_prime,0);
 5     is_prime[0]=is_prime[1]=1;
 6
 7     for(int i=2;i<=n;i++) {
 8         if(!is_prime[i]) {
 9             prime[++p]=i;
10             for(int j=2*i;j<=n;j+=i) is_prime[j]=1;
11         }
12     }
13     return p;
14 }

3.区间筛法

 1 void segment_sieve(LL a,LL b)
 2 {
 3     for(int i=0;(LL)i*i<b;i++) is_prime_small[i]=true;
 4     for(int i=0;i<b-a;i++)     is_prime[i]=true;
 5
 6     for(int i=2;(LL)i*i<b;i++) {
 7         if(is_prime_small[i]) {
 8             for(int j=2*i;(LL)j*j<b;j+=i) is_prime_small[j]=false;
 9             for(LL j=max(2LL,(a+i-1)/i)*i;j<b;j+=i) is_prime[j-a]=false;
10         }
11     }
12
13 }
时间: 2024-10-28 04:50:39

素数相关算法的相关文章

【数学】素数相关算法、结论总结

弱菜开始学数论了,不定时更新... 一.素数定理: 素数分布:小于x的素数大约有 x/ln(x)个 推论:如果Pn为第n个素数 那个Pn约等于n*ln(n); 二.素数测试 1.sqrt(n)的朴素测试.这个就不多说了,数据范围小的时候比较方便 2.nlogn的筛法 void setprime() { memset(prime, 0, sizeof(prime)); //为了方便赋值.令prime[i]=0 表示 i是素数 for (int i=2; i<N; i++) if (!prime[i

素数推断算法(高效率)

chuanbindeng 的 素数推断算法 关于素数的算法是信息学竞赛和程序设计竞赛中常考的数论知识,在这里我跟大家讲一下寻找一定范围内素数的几个算法.看了以后相信 对大家一定有帮助. 正如大家都知道的那样,一个数 n 假设是合数,那么它的全部的因子不超过sqrt(n)--n的开方,那么我们能够用这个性质用最直观的方法 来求出小于等于n的全部的素数. num = 0; for(i=2; i<=n; i++) {  for(j=2; j<=sqrt(i); j++) if( j%i==0 ) b

素数相关?(有关素数的题持续更新中)x

素数(大体举几个栗子): 素数相关知识: 素数概念: 最大公约数只有1和它本身的数叫做质数(素数) 素数小性质: 1.大于一的整数必有素因数. 2.设p是素数,n是任意一个整数 能够推出p|n,(p,n)=1; 3.设p是素数,a,b为整数,若p|ab,则ab中至少有一个能被p整除 4.素数有无穷多个证明: (素数与整数之间的关系:1整除2互素) 假定正整数中只有有限个素数 设p1,p2……pk为从小到大排列起来的数 且N=p1*p2*……pk 设M=N+1 如果M为素数,那么M要大于p1,p2

linux学习之路之加密类型及其相关算法

加密类型及其相关算法 随着互联网越演越烈,互联网上的各种攻击层出不穷,因此在互联网上相互传递的信息越来越不安全,因此为了防止用户在互联网上传递的数据被窃取,因此我们很有必须加强传递的数据的安全性. 数据的安全性主要包括以下三个方面: 数据的机密性:保证传递的数据不被读取 要想使传递的数据不被读取,可以对这些数据进行加密,因为默认这些数据是以明文来传递的 整个加密过程可以这么来理解: 加密:plaintext--->转换规则--->ciphertext 解密:ciphertext--->转

探索推荐引擎内部的秘密,第 2 部分: 深入推荐引擎相关算法 - 协同过滤(转)

第 2 部分: 深入推荐引擎相关算法 - 协同过滤 本系列的第一篇为读者概要介绍了推荐引擎,下面几篇文章将深入介绍推荐引擎的相关算法,并帮助读者高效的实现这些算法. 在现今的推荐技术和算法中,最被大家广泛认可和采用的就是基于协同过滤的推荐方法.它以其方法模型简单,数据依赖性低,数据方便采集 , 推荐效果较优等多个优点成为大众眼里的推荐算法“No.1”.本文将带你深入了解协同过滤的秘密,并给出基于 Apache Mahout 的协同过滤算法的高效实现.Apache Mahout 是 ASF 的一个

[email&#160;protected] Sieve of Eratosthenes (素数筛选算法) &amp; Related Problem (Return two prime numbers )

Sieve of Eratosthenes (素数筛选算法) Given a number n, print all primes smaller than or equal to n. It is also given that n is a small number. For example, if n is 10, the output should be “2, 3, 5, 7″. If n is 20, the output should be “2, 3, 5, 7, 11, 13,

数据结构(C语言版)顺序栈相关算法的代码实现

这两天完成了栈的顺序存储结构的相关算法,包括初始化.压栈.出栈.取栈顶元素.判断栈是否为空.返回栈长度.栈的遍历.清栈.销毁栈.这次的实现过程有两点收获,总结如下: 一.清楚遍历栈的概念 栈的遍历指的是从栈底想栈顶方向运行visit()函数,这是之前的学习中所忽略的:栈的遍历解除了栈的输出顺序只能从栈顶像栈底方向的限制. 二.清空栈时要不要将stacksize重置 网上看到有的人在实现清空栈这一功能时,将stacksize重置为0,我觉得有点问题,起初的想法是将其重置为初始化时的值,在与同学讨论

Miller-Rabin素数测试算法

由费马小定理可以知道,若p是素数且a是整数,则满足a^p==a(mod p).若存在正整数a不满足a^p==a(mod p),那么n是合数. 定义:令a是一个正整数,若p是合数且满足a^p==a(mod p),则p称为以a为基的伪素数. Miller-Rabin素数测试算法原理: 假如p是素数,且(a,p)==1,(a为任意小于p的正整数),那么a^p-1==1(mod p).如果a^p-1==1(mod p), 则可认为n是素数,取多个底进行试验,次数越多,n为素数概率越大.(我的个人理解多次

加密类型及其相关算法

在互联网通信过程中,如何保证数据的安全性? 在通信过程中,数据安全主要从三个方面考虑:机密性(数据的内容不能被窃取) 完整性(数据的内容不能被修改) 身份验证(确定通信双方的身份) 加密类型:1.对称加密,加密和解密使用同一个密钥,但是密钥如何安全传输比较重要,对称加密数度较快,适于加密数据 2.单向加密,提取数据指纹,主要用于保证数据的完整性 单向加密的特点:输入相同则输出一定相同 雪崩效应:输入的微小改变会引起结果的巨大反差 定长输出 3.非对称加密,使用一对密钥(public-key和pr