我要编写一个程序,使用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;
}
}
答案 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;
}