| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1328 人关注过本帖
标题:素数啊,素数。求素数的题目
取消只看楼主 加入收藏
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用shixiaochi在2012-1-16 05:57:39的发言:

#include"stdio.h"     //这种形式是老的c格式 还是?-------声明库函数头文件,要使用非自定义函数的时候,就得告诉编译器,我用他了-------                    
                      //-------------如果你不声明,编译器就认为你使用的是一个变量,而且还没定义。
int main(){           //这是c的代码书写格式吗?新手零基础高接触c两个礼拜 请见谅---c程序都是从main()函数开头的。
int sz[1000];      
      sz[0]=0;       //数组首项赋值 0--算法就是就是将数组下标为质数置1,其他数置0,具体操作就是,讲从下标2开始,到998结束,
      sz[1]=0;
int i,l=2;
for( i=2;i<=998;i++)  //除去第一第二个元素外 其余赋值1
     {
       sz=1;   
     }
for(i=2;i<=998;i++)  
   {
       if(sz) //从第三个元素开始如果值为非0则继续
       {
         
           for(int k=2;k<=998;k=i*(l++))    //索引为k是能够被从2开始整除的数并赋值0
           {
               sz[k]=0;             // 把能整除的全部赋值为0,分离出了素数
           }
       }
   }
  for(i=0;i<=998;i++)  
   {
       if(sz)         //依次取出索引为1的数,也就是素数
       printf("%d\t",i);
   }
           
     
     }
改了一下,之前那个是求1到998之间的质数,改了之后是求1000以内的质数
#include"stdio.h"     //这种形式是老的c格式 还是?-------声明库函数头文件,要使用非自定义函数的时候,就得告诉编译器,我用他了-------                    
                      //-------------如果你不声明,编译器就认为你使用的是一个变量,而且还没定义。
int main(){           //这是c的代码书写格式吗?新手零基础高接触c两个礼拜 请见谅---c程序都是从main()函数开头的。
int sz[1000];      
      sz[0]=0;       //数组首项赋值 0--算法就是就是将数组下标为质数置1,其他数置0,具体操作就是,讲从下标2开始,
                      // 到1000结束,把2的倍数,3的倍数,4的倍数........x的倍数<1000的数找出来全部置0,剩下的数
                     //就是没有什么数是他的倍数了。我是这样理解筛选法的,那么下标为0和1的数组就直接置0就行了,
      sz[1]=0;
int i,l=2;
for( i=2;i<=1000;i++)  //除去第一第二个元素外 其余赋值1
     {
       sz=1;   
     }
for(i=2;i<=1000;i++)  
   {
       if(sz) //从第三个元素开始如果值为非0则继续
       {
         
           for(int k=2;k<=1000;k=i*(l++))    //索引为k是能够被从2开始整除的//与某个数的倍数,不过他先从2的倍数开始,用了2个变量i和l,外循环i=2的时候,l从2开始自加,两数之积,为2*2,2*3,2*4.....到1000以内,2的所有倍数,当外循环i自加到3,那么3*2,3*3,3*4.....到1000以内,所有3的倍数..接着是4的所有倍数,5的所有倍数....貌似算法还有改进的地方,待会儿看看,
           {
               sz[k]=0;             // 把能整除的全部赋值为0,分离出了素数,把下标是非素数的值全部置0,那么剩下下标为1的就是素数了
           }
       }
   }
  for(i=2;i<=1000;i++)  
   {
       if(sz)         //依次取出索引为1的数,也就是素数
       printf("%d\t",i);
   }
           
     
     }

认为事物非黑即白是缺智慧的表现……
2012-01-16 11:55
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
改进了一下,
if(sz[i]) //从第三个元素开始如果值为非0则继续
       {
           l=2;//逻辑上没问题;之前貌似有问题
           for(int k=2;k<=998;k=i*(l++))    //索引为k是能够被从2开始整除的数并赋值0
           {
               sz[k]=0;             // 把能整除的全部赋值为0,分离出了素数
           }
       }

认为事物非黑即白是缺智慧的表现……
2012-01-16 12:05
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
你问的这俩个问题,我还没研究呢,呵呵,等百度一下之后,再告诉你

认为事物非黑即白是缺智慧的表现……
2012-01-16 13:18
快速回复:素数啊,素数。求素数的题目
数据加载中...
 
   



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

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