关于网友提出的“ 100以内的素数问题”问题疑问,本网通过在网上对“ 100以内的素数问题”有关的相关答案进行了整理,供用户进行参考,详细问题解答如下:
问题: 100以内的素数问题描述:
#include "math.h"
main()
{
int i,n;
for(n=2;n<=100;n++)
{
for(i=2;i<>
if(n%i==0)break;
if(i>=n)printf("\t%d",n);
}
}
求100以内的素数,这个程序可以正常运行,在第二个for循环里,已经有了条件i
还有另外一个程序
#include "math.h"
void main()
{
int n,i,k;
for(n=3;n<=100;n+=2)
{
k=sqrt(n);
for(i=2;i<=k;i++)
if(n%i==0)break;
if(i>k)printf("\t%d",n)
}
}
为什么用2~sqrt(n)之间的数去除就可以判断了,第二个if(i>k)这个条件是怎么理解的
解决方案1:
因为素数是只能整除1和本身.如果在2~sqrt(n)之间没有被n整除的,就说明这个是素数了.你想想假如n=a*a,如果从2~a之间没有被n整除的,从a+1到n之间还能有被n整除的吗?
第二个if(i>k)这个条件是这么理解的,从2~k中没有满足n%i的i(即从2~k中没有被n整除的i),所以这个n就是素数,就打印出来.
这样子的:
如果一个数N不是素数的话,他必能分解成2个数的乘积 M1*M2,
设x = sqrt(N);
M1,M2这个两个数必须一个是大于x,一个小于x的,因为俩个都大于
x的话乘积就会大于N,都小于的话就会小于N,所以一个数如果不是素数,
他的一个因数必然是小于x的,所以只要判断在小于x这个区间中有没有
他能正处的就可以了。