| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 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
shixiaochi
Rank: 1
来 自:兰州
等 级:新手上路
帖 子:9
专家分:3
注 册:2012-1-16
收藏
得分:0 
回复 21楼 a271885843
#include"stdio.h"     //这种形式是老的c格式 还是?-------声明库函数头文件,要使用非自定义函数的时候,就得告诉编译器,我用他了---****我的意思是 #include <stdio.h>而不是#include"stdio.h"                    
                      //-------------如果你不声明,编译器就认为你使用的是一个变量,而且还没定义。
int main(){           //这是c的代码书写格式吗?新手零基础高接触c两个礼拜 请见谅---c程序都是从main()函数开头的。*******我的意思是int 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);
   }
           
     
     }
2012-01-16 13:13
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
你问的这俩个问题,我还没研究呢,呵呵,等百度一下之后,再告诉你

认为事物非黑即白是缺智慧的表现……
2012-01-16 13:18
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:0 
回复 17楼 madfrogme
直接提交上去就看到了  不用自己预测 大不了就是 wa tle mle ...

                                         
===========深入<----------------->浅出============
2012-01-16 16:58
有容就大
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:东土大唐
等 级:版主
威 望:74
帖 子:9048
专家分:14309
注 册:2011-11-11
收藏
得分:0 
上代码:
程序代码:
#include  <stdio.h>

#include  <string.h>

#include  <stdlib.h>

#include  <stdio.h>

int  main(void)

{
    bool  a[1001];      // a[i] 对应 i

    int  i, num;

    for (i = 0; i <= 1000; i++)

        a[i] = 1;

    for (i = 2; i < 1000; i++)

    {
        for (num = i + 1; num <= 1000; num++)

            if (num % i == 0) a[num] = 0;
    }

    num = 0;

    for (i = 2; i <= 1000; i++ )

        if (a[i] == 1)
       
        {
            num++;

            printf("%-5d", i);

            if (num % 10 == 0)

                printf("\n");
        }

        printf("\n");

    return  0;
}

梅尚程荀
马谭杨奚







                                                       
2012-01-16 20:24
快速回复:素数啊,素数。求素数的题目
数据加载中...
 
   



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

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