看时(似)很难的问题!
问题是:给定数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; }代码: