| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1328 人关注过本帖
标题:素数啊,素数。求素数的题目
只看楼主 加入收藏
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:10 
做完这个题 你会学到一种相对高效的方法寻找素数  去试一下把
http://www.

质数筛选法
时间限制:1000 ms  |  内存限制:8192 KB
描述
质数是只能被1及其本身整除的数。Eratosthenes筛选法是一种寻找质数的方法。


它的操作如下:


a)创建一个数组,将它的所有元素都初始化为1(真)。下标为质数的数组元素将保持是1,其他元素最后都回    被设置为0。在这道习题中,可以不考虑元素0和元素1。


b)从数组下标2开始,每次找到一个值为1的数组元素是,对数组剩余部分循环,并将下标为该元素下标倍数的   元素设置为0。对于数组下标2,数组中2之后的下标为2的倍数的元素(下标4、6、8、10等)都被设置为0;   对于数组下标3,数组中3之后的下标为3的倍数的元素(下标6、9、12、15等)都被设置为0;依次类推。

输入
(无)

输出
从小到达依次打印2到999之间的质数,每行一个整数。

样例输入
(无)样例输出
2
3
.
.
(以下省略)

                                         
===========深入<----------------->浅出============
2012-01-15 17:56
TonyDeng
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:贵宾
威 望:304
帖 子:25859
专家分:48889
注 册:2011-6-22
收藏
得分:0 
成功編出這個最基本的算法程序,樓主將會學到一個基本的手法,就是設置標誌,這種手法在編程的很多方面都會用到,培養這個思想,將來靈活運用。學的就是這個東西。每一種算法都有它的基本手法,領會這種基本手法,就可以了。必須記住思想,而不是具體的算法代碼。

授人以渔,不授人以鱼。
2012-01-15 18:08
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
这个题目如果我能做的话,可能还要一段时间才行.....现在确实....

认为事物非黑即白是缺智慧的表现……
2012-01-15 18:40
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
完成应该能完成,时间可能超限很多

认为事物非黑即白是缺智慧的表现……
2012-01-15 20:19
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
参考比人的,然后根据自己的理解---------------
#include"stdio.h"
int main(){
int sz[1000];
      sz[0]=0;
      sz[1]=0;
int i,l=2;
 for( i=2;i<=998;i++)
     {
       sz[i]=1;
     }
 for(i=2;i<=998;i++)
   {
       if(sz[i])
       {
            l=2;/*改进了一下,把l=2加进来,以前没有加l=2,也算出一堆来数来,貌似只有加了l=2才是对的*/
           for(int k=2;k<=998;k=i*(l++))
           {
               sz[k]=0;
           }
       }
   }
  for(i=0;i<=998;i++)
   {
       if(sz[i])
        printf("%d\t",i);
   }
      
 return 0;   
     
     }
     

      
  


[ 本帖最后由 a271885843 于 2012-1-16 12:11 编辑 ]

认为事物非黑即白是缺智慧的表现……
2012-01-15 21:25
pspmiliyong
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2011-12-15
收藏
得分:0 
我发一条:
#include "stdio.h"
#include<math.h>
void main()
{
    int i,j,k;
    for(i=3;i<=1000;i++)
    {
        k=(int)sqrt(i);
        for(j=2;j<=k;j++)
        if(i%j==0)  break;
        if(j>k)
        {
            printf("素数为:%d\n",i);
        }
    }
   
}
2012-01-15 21:49
madfrogme
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:版主
威 望:21
帖 子:1160
专家分:1106
注 册:2009-6-24
收藏
得分:0 
回复 11楼 laoyang103
我想问一下怎么可以测时间和内存
可以用time吗?
$ time ./a.out
real    0m0.001s
user    0m0.000s
sys    0m0.000s
是看第一个real部分吗?
内存怎么看?

The quieter you become, the more you can hear
2012-01-15 22:49
shixiaochi
Rank: 1
来 自:兰州
等 级:新手上路
帖 子:9
专家分:3
注 册:2012-1-16
收藏
得分:0 
#include <stdio.h>
int main(void)
{
int i,j;

for(i=1;i<=20;i++)     // i 初始化为1
  {
       for(j=2;j<=i;j++)  //到 j = 2;执行完之后 i++执行 结果变为i == 2  (这么改对吗?)
       {
         if(i%j==0)
         break;
        }
  if(j==i)  
  printf("素数有:%d\n",i);

   }

}
我是个初学者,我分析了这个算法也没错啊,因为自己电脑坏了,使别人电脑,没编译器所以不能试

2012-01-16 04:32
shixiaochi
Rank: 1
来 自:兰州
等 级:新手上路
帖 子:9
专家分:3
注 册:2012-1-16
收藏
得分:0 
回复 15楼 a271885843
#include"stdio.h"     //这种形式是老的c格式 还是?
int main(){           //这是c的代码书写格式吗?新手零基础高接触c两个礼拜 请见谅
int sz[1000];      
      sz[0]=0;       //数组首项赋值 0
      sz[1]=0;
int i,l=2;
for( i=2;i<=998;i++)  //除去第一第二个元素外 其余赋值1
     {
       sz[i]=1;   
     }
for(i=2;i<=998;i++)  
   {
       if(sz[i]) //从第三个元素开始如果值为非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[i])         //依次取出索引为1的数,也就是素数
       printf("%d\t",i);
   }
           
     
     }
2012-01-16 05:57
a271885843
Rank: 2
等 级:论坛游民
帖 子:291
专家分:58
注 册:2011-11-24
收藏
得分:0 
以下是引用shixiaochi在2012-1-16 04:32:53的发言:

#include
int main(void)
{
int i,j;

for(i=1;i<=20;i++)     // i 初始化为1
  {
       for(j=2;j<=i;j++)  //到 j = 2;执行完之后 i++执行 结果变为i == 2  (这么改对吗?)
       {
         if(i%j==0)
         break;
        }
  if(j==i)  
  printf("素数有:%d\n",i);

   }

}
我是个初学者,我分析了这个算法也没错啊,因为自己电脑坏了,使别人电脑,没编译器所以不能试
#include
int main(void)
{
int i,j;

for(i=1;i<=20;i++)     // i 初始化为1
  {
       for(j=2;j<=i;j++)  //到 j = 2;执行完之后 i++执行 结果变为i == 2  (这么改对吗?)
       {
         if(i%j==0)
         break;
        }
  if(j==i)  
  printf("素数有:%d\n",i);

   }

}
我是个初学者,我分析了这个算法也没错啊,因为自己电脑坏了,使别人电脑,没编译器所以不能试
//就这题来讲,比如j从2开始的,那么当i<2的时候,都是不执行第二个嵌套循环,当i=2的时候,判断j<=2,那么i%j==0成立,break执行下一句,因为素数只能被1和自身整除,所以如这题,在1,2....20中,如果有i/j能被整除,当j<i的时候,除开1和本身有能整除i的数,就不是素数了,当i==j的时候,说明,只有1和i自身能整除,所以是素数,因为任何数都能被1整除,所以j从2开始。我是这样理解的,不晓得你看的明白不

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



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

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