判断一个数是否为素数方法一:判断n是否能被2~sqrt(n)间的数整除
#include <stdio.h>
#include <math.h>
int main()
{
int n;
scanf("%d",&n);
int k;
k=sqrt(n);
for(int i=2;i<=k;i++)
{
if(n%i==0)
break;
}
if(i<=k)
printf(“This is not a prime.\n”);
else
printf(“This is a prime.\n”);
return 0;
}
刚开始不理解为什么i<=k的时候,这就不是个素数,而当i>k的时候才能证明n为素数。
理解这个问题就要明白i最后的值为多少,因为是通过i与k的值比较来判定的,同时,k的值是确定的。
在for循环中,第一次执行时用定义的循环变量的初值,从第二次循环开始,每一次都是先执行循环变量的增减,再执行循环变量的条件判断。最后的循环变量的值是正好不满足循环条件的那个值。
但是,当使用了break之后,如果因为break跳出了循环,循环变量的值为执行break时的那个值。
所以在程序中,只要因执行了break,跳出循环,则i的值为当时的i值,不执行加1操作,故i一定小于等于k。
则同时也证明存在一个数使得n被整除,即n不是素数。
但是,如果在2-k之间不存在使得n被整除的数,即不会执行break语句,不会跳出for循环,则循环语句一直执行到最后,i的值最终为k+1,也就是i>k了。
所以通过i>k可得要判断的数是素数。
判断一个数是否为素数方法二:判断n是否能被2~n-1之间的数整除
#include <stdio.h>
int main()
{
int i,n;
scanf("%d",&n);
for(i=2;i<=n-1;i++)
{
if(n%i===0)
break;
}
if(i<n)
printf(“This is not a prime.\n”);
else
printf(“This is a prime.\n”);
return 0;
}
素数,又称为质数,定义为在大于1的自然数中,除了1和它本身以外不再有其他因数。