| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 5718 人关注过本帖
标题:[求助]如何求出2到1000之间的所有素数
只看楼主 加入收藏
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
收藏
 问题点数:0 回复次数:10 
[求助]如何求出2到1000之间的所有素数
各位朋友好,我这有一道思考题,可能对你们来说太简单,可我是新手,所以还请多多指教,
另外,希望各位高手写的程序不要用太复杂的语句,尽量让我们这些新手能看懂,先谢谢了!!!


题目:用数组存储数据,实现筛选法求素数问题的求解.要求.求出2到1000之间的所有素数
注意:筛选法求出2~~N之间所有素数的方法是:首先将这些数全部放入一个数组中,然后重复下面的操作直到数组为
空为止:
A.找出其中的最小数K,则K一定是一个素数,因此可输出.
B.从数组中删除K及其所有倍数.??(就是这步我不知道怎么实现)
搜索更多相关主题的帖子: 素数 小数 语句 
2006-02-08 10:07
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

找到K或K的倍数,把后面的往前挪

我脑袋不灵......


2006-02-08 12:27
woodhead
Rank: 3Rank: 3
等 级:新手上路
威 望:9
帖 子:1124
专家分:0
注 册:2005-7-18
收藏
得分:0 

#include <iostream>
using namespace std;

int DeleteNum(int*,int,int);

int main() {
const int N = 998;
int a[N];

for(int i=0; i<N; i++)
a[i] = i+2;

int size = N;
while(size > 0) {
cout<<a[0]<<' ';
size = DeleteNum(a,size,a[0]);
}

system("pause");
return 0;
}

int DeleteNum(int *p, int n, int m) {
int i,j;
for(i=0,j=0; j<n; j++)
if(p[j] % m)
p[i++] = p[j];
return i;
}


正确性不保证

直接输出算了

[此贴子已经被作者于2006-2-8 16:21:27编辑过]


2006-02-08 16:17
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
收藏
得分:0 
#include<iostream>
#include<vector>
using namespace std;
void main(){
vector<int> prime(1000,1);//用int prime[1000]也行,但是要清1比较麻烦
for(int i=2;i<33;i++)
if(prime[i])
for(int j=i;i*j<1000;j++)
prime[i*j]=0;
//任务已经完成了,下面是output
for(int i=2; i<1000; i++)
if(prime[i]) cout<<i<<" ";
cout<<endl;
}

2006-02-08 23:11
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
收藏
得分:0 
woodhead强,你的程序我运行了一下,成功了,输出正确,只不过你这个程序中我有好些看不懂,莫怪,我是新手啊.谢谢了.我会把你的程序记在U盘里的,等这学期学完后,再仔细看.
另外如果哪位高手还有简单易懂的程序,还请指教!!!
2006-02-08 23:15
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
收藏
得分:0 
版主果然厉害,你这程序更简单了,而且结果正确.
版主,麻烦你解释一下
#include<vector>
vector<int> //这两句中的vector是做什么用的
prime(1000,1)//prime又是做什么用的
2006-02-08 23:30
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
收藏
得分:0 

vector是向量,也就相当与一个不定长数组,prime(1000,1)中prime 是向量名,1000是向量的大小,1是初值可以不写


2006-02-09 10:29
孟囚
Rank: 1
等 级:新手上路
帖 子:8
专家分:0
注 册:2006-2-7
收藏
得分:0 
这道题做过的,但又忘了

2006-02-09 10:56
ysgyh
Rank: 1
等 级:新手上路
帖 子:17
专家分:0
注 册:2006-2-4
收藏
得分:0 

做过就更好了.你想想当时是怎样实现注意中的B(见一楼)的,应该没有用版主那种数组向量方法吧.
如果想不起来就算了,谢谢你的回贴!!!

大家谁还有只用数组,不用向量的方法,我愿洗耳恭听!!!

2006-02-09 11:10
ElfDN
Rank: 4
等 级:贵宾
威 望:11
帖 子:291
专家分:0
注 册:2005-11-13
收藏
得分:0 
我不是说了么,用数组一样的,但是数组你每一个要赋初值,我是在偷懒!
vector<int> prime(1000,1);
就相当与prime[1000]={1,1,1……1};

2006-02-09 13:10
快速回复:[求助]如何求出2到1000之间的所有素数
数据加载中...
 
   



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

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