什么是素数?素数是指大于1的自然数,只能被1和它本身整除的数,而无法被其他自然数整除。
一、【主函数】
#include<stdio.h>
#include<time.h>
#include<math.h>
int isPrime(int x);
int main()
{
int i=0,n=0;
printf("请输入要判断的数(任意实数):");
clock_t start,end;
scanf("%d",&n);
start = clock();//计时开始
if(isPrime(n))
printf("%d是素数\n",n);
else
printf("%d不是素数\n",n);
end = clock();//计时结束
printf("time=%fms\n",(double)(end-start)/CLK_TCK);
return 0;
}
二、【isPrime() 函数】
①让n被i除(i从2~n-1),如果n能够被2~n-1之间的任何一个整数整除,则n肯定不是素数。不足:对于n要循环n-1遍,当n很大时就是n遍。
int isPrime(int x)
{
int ret=1,i=2;//i=2 很重要,注意体会,当x=2时,下面的for循环就不会进去
if(x<2)
ret=0;
else
{
for(i;i<x;i++)
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}
这代码运行时间短
int isPrime(int x)
{
int ret=1,i=2;//i=2 很重要,注意体会,当x=2时,下面的for循环就不会进去
if(x<2)
ret=0;
else
{
for(i;i*i<=x;i++)
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}
②去掉偶数和小于2的数,但是要注意2是素数 ,从3到x-1,每次加2。要循环(n-3)2+1遍,当n很大时就是n/2遍
int isPrime(int x)
{
int ret=1,i=3;//i=
if(x<2 || ((x%2==0)&&(x!=2))) //去掉偶数和小于2的数,但是要注意2是素数 ;
ret=0;
else
{
for(i;i<=x-1;i+=2) //当i =2,3时,是不会进入循环的
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;
}
③ 无须到x-1,到sqrt(x)就够了。只需要循环sqrt(x)遍
int isPrime(int x)
{
int ret=1,i=3;//i=
if(x<2 || ((x%2==0)&&(x!=2))) //去掉偶数和小于2的数,但是要注意2是素数 ;
ret=0;
else
{
for(i;i<=sqrt(x);i+=2) //当i =2,3时,是不会进入循环的
if(x%i == 0)
{
ret=0;
break;
}
}
return ret;