【发布时间】:2010-03-08 03:09:01
【问题描述】:
我正在尝试制作一个程序来确定数字是素数还是合数。到目前为止,我已经得到了。你能给我一些想法让它起作用吗?但是,所有素数都会 ,因为复合物的值都是 r>0 和 r==0,所以它们总是被归类为素数。我该如何解决这个问题?
int main()
{
int pNumber, limit, x, r;
limit = 2;
x = 2;
cout << "Please enter any positive integer: " ;
cin >> pNumber;
if (pNumber < 0)
{
cout << "Invalid. Negative Number. " << endl;
return 0;
}
else if (pNumber == 0)
{
cout << "Invalid. Zero has an infinite number of divisors, and therefore neither composite nor prime." << endl;
return 0;
}
else if (pNumber == 1)
{
cout << "Valid. However, one is neither prime nor composite" << endl;
return 0;
}
else
{
while (limit < pNumber)
{
r = pNumber % x;
x++;
limit++;
if (r > 0)
cout << "Your number is prime" << endl;
else
{
cout << "Your number is composite" << endl;
return 0;
}
}
}
return 0;
}
【问题讨论】:
-
您可能想立即添加对偶数的检查以加快 if( num % 2 == 0) 之类的速度,然后您可以让循环增加两个而不是那些。还有很多寻找素数的巧妙技巧,5 很容易,因为数字以 0 或 5 结尾,可被 3 整除的数字加起来可被 3 整除。最好的办法是消除真正的很容易先检查。
-
@Maynza 数字并不真正以 5 结尾。只是它们的十进制表示以“5”结尾。要使用这种检查,您需要首先将整数转换为字符串,或者以某种方式构建其数字列表。在这种情况下,您可以将用户输入作为字符串获取,执行这两项检查,然后将其转换为整数以进行所有其他检查。但工作量更大,不知道会不会更快。
-
不,您不会,只需检查 (num % 10 == 5)。
-
而不是“while (limit