方法一:
#include<stdio.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(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;
}
方法二:
除了2之外,其余的偶数都不是素数
#include<stdio.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(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;
}
改进——>程序运行效率更高
#include<stdio.h>
#include<math.h>
int isPrime(int x);
int main(void)
{
int x;
scanf("%d",&x);
if( isPrime(x) ){
printf("%d是素数\n",x);
}else{
printf("%d不是素数\n",x);
}
return 0;
}
int isPrime(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;
}
方法三:
算法:
1.令x为2
2.将2x、3x、4x直至ax<n的数标记为非素数
3.令x为下一个没有被标记为非素数的数,重复2;直到所有的数都已经尝试完毕。
伪代码:
1.开辟prime[n],初始化其所有元素为1,prime[x]为1表示x是素数
2.令x=2
3.如果x是素数,则对于(i=2;x*i<n;i++)令prime[i*x]=0;
4.令x++,如果x<n,重复3,否则结束
#include<stdio.h>
int main()
{
const int maxNumber = 25;
int isPrime[maxNumber];
int i;
int x;
//数组初始化1
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);
}
}
printf("\n");
return 0;
}