求出最小的n个合数(n是键盘输入的任意正整数)的算法

/*


算法思想:假如有两个相邻的质数:i和m,而且m>i。如果 (m-i-1)>=n,那么在i和m区间中必定有不少于n个的合数。
   从素数3开始找,每次累加2,产生出来的全部是奇数。素数绝对不会是偶数的。在这些奇数中,一个个判断是否为素数。
    如果是素数,就要检查这个素数m和前一个素数i之间“夹”着的合数够不够。假如够了,就输出结果。
    假如不够,就要用新找到的素数m取代原有的较小的那个素数i,接着按照前面的步骤往更大的数中寻找。*/
    
#include<stdio.h>
#include<math.h>
int isHe(int a)
{
int i;
for(i=2;i<sqrt(a*1.0);i++)
{
if(a%i==0)
return 1;
}
return 0;
}
int main()
{                            
int n,i=3,a=1,m;
scanf("%d",&n);
if(n%2==0)
{
printf("输入的数应为奇数");
return 0;
}
m=i+2;
while(1)
{
while(isHe(m))
{
m=m+2;
}
if((m-i-1)==n)
{
printf("%d,%d",i,m);
return 0;
}
else
{
i=m;
m=m+2;
}
}
}
展开阅读全文

没有更多推荐了,返回首页