c ++程序使用函数打印素数

时间:2012-11-15 16:31:17

标签: c++ multidimensional-array

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

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

thanx ^ _ ^

#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;
    }
}

2 个答案:

答案 0 :(得分:1)

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

if (is_prime(i)) {
    x[numPrimes / 5][numPrimes % 5] = i;
    numPrimes ++;
}

答案 1 :(得分: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;
}