#include<stdio.h>intisPrime(int x){int ret =1;int i;if(x ==1) ret =0;for(i =2; i < x; i++){if(x % i ==0){
ret =0;break;}}return ret;}intmain(void){int x;scanf("%d",&x);if(isPrime(x)){printf("%d是素数\n", x);}else{printf("%d不是素数\n", x);}return0;}
2. 去掉偶数,从3到x-1,每次加2 ----O(n/2)
intisPrime(int x){int ret =1;int i;if(x ==1||(x %2==0&& x !=2))
ret =0;for(i =3; i < x; i+=2){if(x % i ==0){
ret =0;break;}}return ret;}intmain(void){...}
3. 无需到x-1,到sqrt(x)就够了 ---- O(sqrt(n))
#include<math.h>intisPrime(int x){int ret =1;int i;if(x ==1||(x %2==0&& x !=2))
ret =0;for(i =3; i <=sqrt(x); i+=2){if(x % i ==0){
ret =0;break;}}return ret;}intmain(void){...}
4. 判断能否被已知的且<x的素数整除,输出一百个素数
#include<stdio.h>intisPrime(int x,int knownPrimes[],int numberOfKnownPrimes){int ret =1;int i;for(i =0; i < numberOfKnownPrimes; i++){if(x % knownPrimes[i]==0){
ret =0;break;}}return ret;}intmain(void){constint number =100;int prime[number]={2};int count =1;int x =3;while(count < number){if(isPrime(x, prime, count)){
prime[count++]= x;}
x++;}// for (i = 0; i < number; i++) {// printf("%d", prime[i]);// if ((i + 1) % 5) printf("\t");// else printf("\n");// }return0;}
5. 构造n以内素数表
令x=2
将2x、3x、4x直至ax<n的数标记为非素数
令x为下一个没有被标记为非素数的数,重复2;直到所有的数都已经尝试完毕
intmain(){constint maxNumber =25;int isPrime[maxNumber];int i;int x;for(i =0; i < maxNumber; i++){
isPrime[i]=1;}for(x =2; x < maxNumber; x++){if(isPrime[x]){for(i =2; i*x < maxNumber; i++){
isPrime[i*x]=0;}}}// for (i = 2; i < maxNumber; i++) {// if (isPrime[i]) {// printf("%d\t", i);// }// }return0;}