看时(似)很难的问题!
问题是:给定数N(2<=N<=8),生成所有其前任意位都是质数的N 位质数。7331既是一个四位质数,因为7,73,733页均是质数。在标准输出上按升序输出所有符合要求的质数,例如:N=2,时输出 : 23 29 31 37 53 59 71 73 79 这个题目我做的时候还是想了有一点时间,开始还想用第归,后来发现用循环也可以完成,最后是做出来了分享一下 ,在运行的时候发现这个程序很耗CPU,我运行时达到了50% 空闲时为10%以下不开其它程序情况下,CORE I5的CPU 。谁也可以测试一下,然后分析一下。下面是原
程序代码:
#include<alloc.h>
#include<stdio.h>
#include<math.h>
int F(long n);
main()
{ long *p,*q,*w;
int i,j,n,m=4,k;
printf("please input a number\n");
scanf("%d",&n);
printf("\n");
p=(long *)realloc(5,sizeof(long));
*p=2;*(p+1)=3;*(p+2)=5;*(p+3)=7;*(p+4)=9;
for(i=1;i<n;i++)
{ q=(long *)realloc(4*m,sizeof(long));
w=q;
k=m; m=0;
for(j=0;j<k;j++)
{ if(F(*p*10+1)) {*q=*p*10+1;q++;m++;}
if(F(*p*10+3)) {*q=*p*10+3;q++;m++;}
if(F(*p*10+7)) {*q=*p*10+7;q++;m++;}
if(F(*p*10+9)) {*q=*p*10+9;q++;m++;}
p++;
}
free(p);
p=(long *)realloc(m,sizeof(long));
for(j=0;j<m;j++)
*(p+j)=*(w+j);
free(q);
}
for(i=0;i<m;i++)
{ printf("%d\t",*(p+i));
if(i%8==0)printf("\n");
}
free(p);
}
int F(long n)
{int i,flag=1;
for(i=2;i<sqrt(n);i++)
if(n%i==0){ flag=0;break;}
return flag;
}
代码:








