素数判定 (素数打表)

 1 #include<cstdio>
 2 int a[100000+11]={1,1};
 3 int main()
 4 {
 5     for(int i=2;i<100000;i++)
 6     {
 7         if(a[i] == 1) continue;
 8         for(int j=i*2;j<100000;j+=i)
 9         {
10             a[j]=1;
11         }
12     }
13     int x,y,k;
14     while(scanf("%d%d",&x,&y)&&(x+y))
15     {
16         k=0;
17         for(int i=x;i<=y;i++)
18         {
19             if(a[i*i+i+41] == 1)
20             {
21                 printf("Sorry\n");
22                 k=1;
23                 break;
24             }
25         }
26         if(k == 0)
27         printf("OK\n");
28     }
29
30 }
时间: 2024-11-19 15:48:13

素数判定 (素数打表)的相关文章

HDU 2012 素数判定(素数)

http://acm.hdu.edu.cn/showproblem.php?pid=2012 题意:水题一枚 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. 分析: 本题的数据范围很小,求出表达式在-39到50内的所有可能值可以得到下面的数: 1523 1447 13731301 1231 1163 1097 1033 971  911 853  797 743  691  641 593  547 

miller_robin大素数判定

参考了ACdreamer大神的博客http://blog.csdn.net/acdreamers/article/details/7913786 在51nod上看了个10^30范围的素数判定,打表肯定是不行了,应该用miller-robin素数判定加java的BigInteger 首先基于fermat小定理就是gcd(a,p)=1时,a^(p-1)%p=1,所以在生成rand(2,p-1)的随机数后,如果输入的是个素数,那么必有pow(a,p-1)%p=1,这里采用快速幂取模,在一次探查后,若结

素数判定相关资料

素数(质数)的判定 (1)最基本素数判定方法大家熟悉,只用看看2到n(或n的平方根)之间有没有n的约数: #include<stdio.h> void main() { int i,n; scanf("%d",&n); for(i=2;i<n;i++) if(n%i==0)break; if(i<n||n==1)puts("No"); else puts("Yes"); } 此方法适用于判定较少数,数据量大时会超时

Miller-Rabin算法 codevs 1702 素数判定 2

转载自:http://www.dxmtb.com/blog/miller-rabbin/ 普通的素数测试我们有O(√ n)的试除算法.事实上,我们有O(slog³n)的算法. 定理一:假如p是质数,且(a,p)=1,那么a^(p-1)≡1(mod p).即假如p是质数,且a,p互质,那么a的(p-1)次方除以p的余数恒等于1.(费马小定理) 该定理的逆命题是不一定成立的,但是令人可喜的是大多数情况是成立的. 于是我们就得到了一个定理的直接应用,对于待验证的数p,我们不断取a∈[1,p-1]且a∈

利用辛达拉姆筛进行素数判定

1 常规判定方法 素数判定问题就是对给定的正整数n判定是否为素数.所谓素数,是指恰好有2个约数的整数.因为n的约数都不超过n,所以只需要检查2~n-1的所有整数是否整除n就能判定是不是素数.不过,我们还能进一步优化.如果d是n的约数,那么n/d也是n的约数.由n=d*n/d可知min(d,n/d),所以只需要检查2~的所有整数就足够了.此时,素数判定的复杂度为O().代码实现如下: int classic(long long a) { long long half=(long long)sqrt

数学问题的解决窍门—素数判定

数学问题的解决窍门 素数判定 所谓素数: 指恰好有2个约数的整数. 判定: 因为n的约数都不超过n, 所以只要检查 2 ~ n-1 的所有整数是否整除n就能判定n是不是素数. 在此,如果d 是 n的约数, 那么 n/d也是n的约数.由n = d * n / d 可知 min(d, n/d) <= 根号n? , 所以只要检查 2 ~ ? 根号n 的所有整数就足够了. 同理可知,整数分解和约数枚举都可以在 O(根号n?) 时间完成.(还有更高效的算法) #include <iostream>

数学#素数判定Miller_Rabin+大数因数分解Pollard_rho算法 POJ 1811&amp;2429

素数判定Miller_Rabin算法详解: http://blog.csdn.net/maxichu/article/details/45458569 大数因数分解Pollard_rho算法详解: http://blog.csdn.net/maxichu/article/details/45459533 然后是参考了kuangbin的模板: http://www.cnblogs.com/kuangbin/archive/2012/08/19/2646396.html 模板如下: //快速乘 (a

素数判定(给你两个数a、b,现在的问题是要判断这两个数组成的区间内共有多少个素数)

1 #include<stdio.h> 2 #include<math.h> 3 int func(int x)//自定义函数实现寻找素数功能 4 { 5 int i, flag = 1; 6 for (i = 2; i <= (int)sqrt((float)x); i++) //取到平方根就好,(float)x,强制将int x型转化成float型,再将平方根转化为int型 7 { 8 if (x%i == 0) //是合数,则标记 9 flag = 0; 10 } 11

素数判定 AC 杭电

素数判定 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submission(s): 87861    Accepted Submission(s): 30699 Problem Description 对于表达式n^2+n+41,当n在(x,y)范围内取整数值时(包括x,y)(-39<=x<y<=50),判定该表达式的值是否都为素数. Input 输入数

[Miller-Rabin][CODEVS1702]素数判定2 解题报告

题面描述:判定一个数P∈[1,2^63-1]∩N是素数么. 按照朴素的判定素数方法,至少也需要O(P^0.5)的,但这道题就是霸气到连这样的时间复杂度都过不了的地步. 实在是不会做了,就学习了传说中的Miller-Rabin素数判定法. 两个引理: ①费马小定理: 设p为质数,且不满足p|a, 则a^(p-1)=a(mod p). 证: 又一个引理,若n与p互质,且a与p互质,则n*a与p互质. 这真的是一个看似很简单的引理,但它却意味着一些看似不那么简单的事情. 设A=(0,p)∩N,则 ①对