【第一种情况】判断某个数是不是质数,多用于单次判断某个数是不是质数;
#include<stdio.h> #include<time.h> #include<math.h> int IsPrime(int n){ int i; if (n==1) return 0; if (n==2) return 1; if(n%2==0) return 0; for(i = 3;i <= sqrt(n);i+=2){ if(n%i==0) return 0; } return 1; } int main(){ int n,i; int t1 = clock(); for(i = 1;i<=100000;i++){ if(IsPrime(i)) printf(" %d ",i); } int t2 = clock(); printf("\n运行时间:%d\n",t2-t1); }
【第二种情况】打表 多用于要判断多个数是不是质数,那么把质数先求出来。
#include<stdio.h> #include<time.h> #include<math.h> #define N 100000 int prime[100000]; int a[N]; void init(){ int i,j,len=0; prime[0]=1; prime[1]=1; for(i = 2;i < N ;i++){ prime[i] = 0; } for(i = 2; i < N; i++) { if(!prime[i]){ a[len++] = i; } for(j = 0; j< len &&a [j]*i < N; j++) { prime[a[j]*i] = 1; if(i % a[j] == 0) break; } } } int main(){ int i; int t1 = clock(); init(); for(i=0;i<N;i++){ if(!prime[i])printf("%d是素数\n",i); } int t2 = clock(); printf("\n运行时间:%d\n",t2-t1); }
上面的方法思路是把素数从头开始计算素数,然后把已经计算出来的素数倍数去掉,依此增加素数的数量。