当前位置:文档之家› 求素数

求素数

for(i=2;i<(n=sqrt(n));i++)
if(n%i==0)
for(i=2;i<n/2;i++)
if(n%i==0)
首先,这应该是数学问题。判断一个正整数m是否为素数,需要判断m是否能被2~m-1之间的整数整除。由于m不可能被大于m/2的整数整除,除非是m本身。所以,i的取值区间可以缩小为[2,m/2],数学上能证明该区间还可以缩小到[2,√m]。
void maபைடு நூலகம்n()
{
int i ,j, k=1,m;
printf("输入一个整数:");
scanf("%d",&m);
for(i=2; i<m; i++)
{
k=1;
for(j=2; j<i; j++)
{
if(i%j == 0)
{
k=0;
break;
}
}
if(k==1)
{
printf("i=%d是素数\n",i);
}
}
}
求所有大于1小于整数m的非素数:(由素数的概念知道,一个数,除了1和它本身,能被任意一个整数整除,那这个数就是非素数)
#include<stdio.h>
void main()
{
int i,j,m;
printf("输入一个整数:");
scanf("%d",&m);
for(i=2; i<m; i++)
素数:是指除了1和该数本身之外,不能被其他任何整数整除的数。
2,3,5,7,11,13,17,19,23……….
判断一个数(比如这个数是n)是否为素数:将n作为被除数,将2~n-1之间各个整数先后作为除数,如果都不能被整除,则n为素数。
求所有大于1小于整数m的素数:
#include<stdio.h>
for(i=2;i<=(n-1);i++)
if(n%i==0)
第三,对于N来说,不必用从2到N一1的所有素数去除,只需用小于等于√N(根号N)的所有素数去除就可以了。这一点可以用反证法来证明:
如果N是合数(所有大于2的偶数都是合数),则一定存在大于1小于N的整数d1和d2,使得N=d1×d2。如果d1和d2均大于√N,则有:N=d1×d2>√N×√N=N。而这是不可能的,所以,d1和d2中必有一个小于或等于√N。
{
for(j=2; j<i; j++)
{
if(i%j == 0)
{
printf("i=%d不是素数\n",i); break;
}
}
}
}
第一,对于一个自然数N,只要能被一个非1非自身的数整除,它就肯定不是素数,所以不必再用其他的数去除。
第二,对于N来说,只需用小于N的素数去除就可以了。例如,如果N能被15整除,实际上就能被3和5整除,如果N不能被3和5整除,那么N也决不会被15整除。
相关主题