| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 11075 人关注过本帖
标题:求100以内素数的问题
只看楼主 加入收藏
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
结帖率:78.57%
收藏
 问题点数:0 回复次数:14 
求100以内素数的问题
求素数的流程图或程序,并且能够输出2来,我看过几个程序,都不能输出2.求教
搜索更多相关主题的帖子: 流程图 
2012-09-16 21:14
a7882669
Rank: 4
等 级:业余侠客
帖 子:192
专家分:290
注 册:2012-4-17
收藏
得分:0 
以后还是把自己的思路说出来吧
2012-09-16 21:57
JON_me
Rank: 2
等 级:论坛游民
帖 子:30
专家分:68
注 册:2012-5-4
收藏
得分:0 
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
double m,n;
int main()
{
    FILE * fp;
    int x;
    int i,j,k;
    int *a=NULL,*p=NULL;
    j=2;
    m=0;
    printf("请输入要求最大的数内的素数:");
    scanf("%d",&x);
    m=clock();
    p=(int *)malloc((x+1)*4);                           //申请动态数组
    for(i=2;i<=x;i++)                                   //录入2到x之间的值,包括x和2的边界值
        p[i-2]=i;
    a=p;                     
    for(;p[j-2]<=x;j++)                                 //排去从素数的倍数,并将该倍数赋值为该素数
        for(i=j;i<=x;i++)
            if(a[i-2]!=p[j-2])
                if((a[i-2]!=0)&&(p[j-2]!=0))
                    if(a[i-2]%p[j-2]==0)
                        a[i-2]=0;
    n=clock();
    printf("输出的素数是:\n");                         //输出数组中非零的数
    for(i=2,j=1;i<=x;i++)   
        if(a[i-2]!=0)
        {
            printf("%d\t",a[i-2]);
            p[j-1]=a[i-2];
            if(j%8==0)
                    printf("\n");
            j++;
        }
    if((fp=fopen("F:\\prime.txt","w+"))==NULL) //写入文本
            exit(0);
    for(k=0;k<j-1;k++)
    fprintf(fp,"%d\t",p[k]);
    printf("\n");
    printf("保存成功!\n");                             //提示保存文件成功
    fclose(fp);                                          //关闭文件
    free(p);
    printf("计算所需时间:");
    printf("%.6lf\n",(n-m)/1000);
    scanf("%d",&j);
    return 0;
}
   自己找一下这个算法吧!!!

因为爱情,不会轻易悲伤······
2012-09-16 22:12
w995612220
Rank: 5Rank: 5
等 级:职业侠客
威 望:1
帖 子:139
专家分:313
注 册:2012-6-20
收藏
得分:0 
找个算法就OK了
2012-09-17 00:13
freecast
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2012-7-29
收藏
得分:0 
#include<stdio.h>
int main(){
    int i,j,count;
    printf("2,3,5,");
    count=sqrt(100);
    for(i=5;i<=100;i++){
        if(i%2!=0&&i%3!=0&&i%5!=0)
            printf("%d,",i);
    }
    return 0;
}
因为我们知道2,3,5肯定是素数,可以先把它三个输出。所以如果一个数i不能把他们都整除,那这个数i也是素数。
还有另一种方法就是先对你所求的100以内的100进行开平方。如果在这个平方根以内的数不能求出某个数的因子。那大于平方根的也肯定求不出。
这个方法复杂度要高一些。要用到双重循环
#include<stdio.h>
#include<math.h>
int main()
{
   int i,m,j;
   for(i=2;i<=100;i++)
   {
    m=sqrt(i);
    for(j=2;j<=m;j++)
       if(j%m!=0)
         if(j>m)
            printtf("%d ",i);
       else
         break;
    }
    return 0;
}
2012-09-17 09:55
wzh2005022
Rank: 1
等 级:新手上路
帖 子:12
专家分:2
注 册:2012-9-16
收藏
得分:0 
回复 3楼 JON_me
你这个好复杂,以前我看到过的只有你这个的一半就完成了
2012-09-17 10:07
freecast
Rank: 2
等 级:论坛游民
帖 子:12
专家分:10
注 册:2012-7-29
收藏
得分:0 
我贴出来的是两个程序。两种方法。呵呵。还望楼上大师赐教
2012-09-17 10:20
qishi123
Rank: 1
等 级:新手上路
帖 子:78
专家分:9
注 册:2012-9-5
收藏
得分:0 
回复 5楼 freecast
有没有不用break的程序了,画流程图的话没法表示,我觉得你的第一个程序有问题,不能只考虑2,3,5。
2012-09-17 21:53
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
收藏
得分:0 
嘿嘿额
2012-09-18 09:30
xtjopt
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:89
专家分:168
注 册:2012-9-12
收藏
得分:0 
标记法 假设全是素数
for(i=2;i<=100;i++) {
    int k=1               //k=1表示素数            
    for(j=2;j<=i/2;j++) {           
        if(i%j==0) {
            k=0;    //k=0表示不是素数
            break;  //下面的循环判断也就没必要执行了
        }
    }
    if(k==1) {
        printf("%d",i);
    }
}
2012-09-18 10:09
快速回复:求100以内素数的问题
数据加载中...
 
   



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

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.029874 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved