7.24 素数总结
2014-02-15 15:34
316 查看
判断素数:
第一种方法用于小数据。
1 int k=0; 2 int isprime(int num) 3 { 4 int i, j; 5 j = sqrt(num); 6 for (i = 2; i <= j; i++) 7 if (num%i == 0) 8 return 0; 9 return 1; 10 }
第二种素数筛选:
用于大数据,数据很小的话就用第一种吧
1 建立一个全1的数组(下标2~N),
2 先将下标是2的倍数的全置0,再将下标是3的倍数全置0,……,以此类推,
3 最后剩下的,仍是1的那些下标,就肯定是素数了。
1 #include <stdio.h> 2 #include <string.h> 3 #include <math.h> 4 5 #define N 100000 6 #define yes '1' 7 #define no '0' 8 char flag[N+1]; 9 10 void is_prime(int n) 11 { 12 int i, j; 13 memset(flag, yes, sizeof(flag)); 14 flag[0]=flag[1]=no; 15 int len=sqrt(n)+1; 16 for(i=2; i<len; i++) 17 { 18 if(flag[i]==no) continue; 19 for(j=i+i; j<=n; j+=i) 20 flag[j]=no; 21 } 22 } 23 24 int main(void) 25 { 26 int n; 27 ///find the primes from 1 to n(n<=N) 28 scanf("%d", &n); 29 is_prime(n); 30 for(int i=1; i<=n; i++) 31 if(flag[i]==yes) 32 printf("%8d", i); 33 printf("\n"); 34 return 0; 35 }
素数打表:
1 #define N 1000001 2 #define yes '1' 3 #define no '0' 4 char flag ; 5 int p[80000]; 6 void is_prime() 7 { 8 int i, j ; 9 memset(flag, yes, sizeof(flag)); 10 flag[0]=flag[1]=no; 11 int len=sqrt(N)+1; 12 for(i=2; i<len; i++) 13 { 14 if(flag[i]==no) continue; 15 for(j=i+i; j<=N; j+=i) 16 flag[j]=no; 17 } 18 19 for (i=2;i<=N;i++) 20 if (flag[i]==yes) 21 { 22 T++; 23 p[T]=i; 24 } 25 }
总结 : 对于素数的题目,几乎都会用到前面三种。但素数表还是自己写吧。背下来的迟早会忘。至少要自己写的出来。
相关文章推荐
- 素数算法总结
- 【转】素数相关算法总结
- 数论线性筛总结 (素数筛,欧拉函数筛,莫比乌斯函数筛,前n个数的约数个数筛)
- 素数判定总结
- 7.24 快排总结
- 算法总结:判断一个数是否为素数
- 【转】素数相关算法总结
- 算法总结:判断一个数是否为素数
- 2017.3.13 反素数ant 失败总结
- 素数表学习总结
- 【转】素数总结
- 求反素数个数模版总结
- 找素数算法总结
- 算法总结:判断一个数是否为素数
- ZZUOJ-1222- 属于ACMer的游戏 猜素数 (某月赛,总结一下素数筛选法)
- 判断素数的几种方法的总结
- python学习习题总结(3)——菲波那切数列,求10万以内素数优化
- 素数总结
- 素数总结
- 算法总结:判断一个数是否为素数