| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
共有 1172 人关注过本帖
标题:看时(似)很难的问题!
取消只看楼主 加入收藏
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
结帖率:66.67%
收藏
 问题点数:0 回复次数:3 
看时(似)很难的问题!
问题是:给定数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;
}
代码:
2012-06-06 23:18
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
你用数组,我用动态内存,哪个优化一点?我后来又测了一下,CPU占用不高,原来的测试有误。可以从运行时间,占内存,来考虑。
2012-06-07 09:51
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
还有就是用数组不太好定维数,当你无法知道最大的数个数时。你的更简练,值的学习。
2012-06-07 10:03
cuijunchao
Rank: 5Rank: 5
来 自:湖南桂东
等 级:职业侠客
威 望:3
帖 子:132
专家分:386
注 册:2012-4-4
收藏
得分:0 
2^8个数感觉还是很大的,一般数组开那么大有点浪费,关键是数组中有大部分内存没有用到。不过版主经念丰富,我要多学习。
2012-06-07 11:05
快速回复:看时(似)很难的问题!
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.017374 second(s), 10 queries.
Copyright©2004-2025, BC-CN.NET, All Rights Reserved