注册 登录
编程论坛 C++教室

求助,写了很久都没弄出来!!!!!

小小小火柴 发布于 2013-12-04 22:42, 917 次点击
  设计一程序,要求用率选法求100以内的素数,筛选法就是从2到100中去掉2,3,……9,10的倍数,剩下的就是100以内的素数,已知该程序的功能框架如下:
   main( )
   {
      建立2到100的数组A[],其中A[i]=i;
      建立2到10的素数表B[],其中存放2到10以内的素数;
      若A[i]=i是B[]中任一数的倍数,则踢除A[i];
      输出A[]中所有没有被剔除的数;
14 回复
#2
小小小火柴2013-12-04 22:43
老是找不到方法去控制该怎么输出!!!!
#3
Susake2013-12-04 22:56
再送分吗?
程序代码:

#include <iostream>

int A[101], B[5] = {0, 2, 3, 5, 7};

int main(int argr, char *argv[])
{
    for (int n; std :: cin >> n;)
    {
        for (int i = 2; i <= n; i++) A[i] = i;
        for (int i = 2; i <= n; i++)
            for (int j = 1; j <= 4; j++)
                if (i % B[j] == 0 && A[i] != B[j])
                {
                    A[i] = !A[i];
                    break;
                }
        for (int i = 2; i <= n; i++)
            if (A[i]) std :: cout << A[i] << std :: endl;
    }
    return 0;
}


[ 本帖最后由 Susake 于 2013-12-4 22:58 编辑 ]
#4
peach54602013-12-05 08:17
num[] = {2...100};
for(i->2...10)
{
for(j->num)
{
if(num[j] == 0)
continue;
else
num[j] = (num[j]%i == 0 ? 0 :num[j]);
}
}

for(j->num)
{
if(num[j] != 0)
printf num[j];
}
#5
yuccn2013-12-05 08:28
只能接分了
#6
左手拉一只猫2013-12-05 09:28
楼上都是抢分党么。。。
#7
小小小火柴2013-12-05 12:26
回复 3楼 Susake
明显你的  B[]数组就错了!0,不是素数!所以B[4]={2,3,5,7};
#8
Susake2013-12-05 13:59
回复 7楼 小小小火柴
不是的...想想数组的下标是0开始..!再看看我遍历的B数组!
#9
jiajia9406122013-12-05 14:09
#10
Susake2013-12-05 14:09
回复 9楼 jiajia940612
为嘛头晕?
#11
kevin_012013-12-05 14:47
朋友我也提一种思路:

#include<iostream>
#include<vector>
using namespace std;

int main()
{
    int n=0;
    int A[100]={0};
    int B[4]={2,3,5,7};
    vector<int> C;

    for(int i=2;i<101;i++)    A[i]=i;
    for( i=2;i<101;i++)
        for(int j=0;j<4;j++)
            if (i % B[j] == 0 && A[i] != B[j])
            {
                C.push_back( A[i]);
                n++;
                break;
            }   
    for(i=2;i<100;i++)
    {
        int a=1;
        for( int j=0;j<n;j++)
        {
            if(A[i]==C[j])
            {    a=0; break;}

        }
        if(a==1)
            cout<<A[i]<<endl;
    }
}
#12
小小小火柴2013-12-05 16:54
回复 11楼 kevin_01
你的运行结果是:2,3,5,7,11,13,17……。但是,2,3,5,7,按照上面的筛选法。是不会出现在结果里面的!我的这个题目是软件工程的思想,必须严格地按照题目要求来做。不然,为什么不直接用其他方法呢?
#13
小小小火柴2013-12-05 18:32
回复 11楼 kevin_01
对。只要去掉那个判断就行了!
#14
peach54602013-12-05 18:40
为嘛楼主木有针对偶滴伪代码评论一哈子咧...
瞧不起我
#15
kevin_012013-12-05 21:14
回复 12楼 小小小火柴
这样:  if (i % B[j] == 0)
1