-6

我必须编写一个程序,使用 2 个函数打印从 1 到 100 的素数(一行每 5 个数字):第一个测试数字是否为奇数,第二个测试它是否为素数

我写了那个代码,但它没有工作它只打印 100 之前的最后一个素数

谢谢^_^

#include "stdafx.h"

bool is_odd(int x)
{
    if (x%2==0)
        return false;
    else
        return true;
}

bool is_prime(int x)
{
    int j=0;
    if (!(is_odd(x)))
        return false;

    if(is_odd(x))
    {
        for(int i=1;i<=x;i++)
            if (x%i==0)
                j=j+1;

        if (j==2)
            return true;
        else
            return false;
    }
}


void main()
{
    int x[100][100];
    int i=1;    

    while (i<=100) 
    {
        for(int j=1;j<=20;j++)
            for(int k=1;k<=5;k++)
                if (is_prime(i))
                    x[j][k]=i;
        i++;
    }
    for(int j=1;j<=20;j++)
    {
        for(int k=1;k<=5;k++)
            cout<<x[j][k]<<' ';
        cout<<endl;
    }
}
4

2 回答 2

1

它正在打印最后一个数字(97),因为在循环的每次迭代期间i,您都在设置数组的所有元素x,然后在最后打印它。所以很自然,你得到的只是最后一个素数。如果您只想打印素数并仍然保持网格,您应该为您的if (is_prime(i))子句执行以下操作:

if (is_prime(i)) {
    x[numPrimes / 5][numPrimes % 5] = i;
    numPrimes ++;
}
于 2012-11-15T16:39:06.203 回答
1

对于一个简单的问题,如此惊人的复杂性。您不需要数组来执行此操作,甚至不需要多维数组。

int main()
{
    int count = 0;
    for (int i = 1; i <= 100; ++i)
    {
        if (is_prime(i))
        {
            cout << i << ' ';
            ++count;
            if (count == 5)
            {
                cout << endl;
                count = 0;
            }
        }
    }
    cout << endl;
}
于 2012-11-15T16:43:00.330 回答