我,我是c ++和编程的初学者。如果你能帮助我,我真的很感激。
我一直在努力编写一个程序,告诉你一个给定的数字是否为素数(如果是的话,应该打印“素数”)
以下是我提出的代码:
int main() {
cout<<"enter a number";
int x;
cin>>x;
int y = 2;
int remainder = 1;
while(y<x,remainder!=0) {
remainder = (x%y);
y++;
}
if (remainder!=0) {
cout<<"prime";
}
}
问题是程序不会为任何数字打印“prime”。我想有更有效的方法来编写这样的程序,但是你能告诉我这样做的问题是什么?
谢谢。我希望它不是太简单,虽然我担心它是......
答案 0 :(得分:3)
用逗号连接条件不符合您的预期。
逗号运算符有有效的应用程序,但在这种情况下,
“和”更合适:
while(y<x && remainder!=0)
答案 1 :(得分:1)
你应该改变
while(y < x, remainder != 0)
到
while(y < x && remainder != 0)
逻辑运算符“和”被写为&amp;&amp;在C ++(以及许多其他编程语言)中。
答案 2 :(得分:0)
你应该这样做:
if(x==2 || x==3)
cout<<"prime";
else
for(int i = 2; i < x/2; ++i)
if(x % i == 0)
{
cout<<"Not prime";
break;
}
这是它的主要原因。 附:您不需要检查从1到x的数字。从1到x / 2就足够了。
答案 3 :(得分:0)
通过使用&#34; Eratosthenes筛选&#34;,您可以减少测试它是否是素数所需的时间。 X除以小于X的平方根的数字。
#include <cmath>
#include <iostream>
int main() {
unsigned int x;
std::cout<<"Enter a number:";
std::cin >> x;
bool prime = true;
for(unsigned int y = 2; y <= static_cast<unsigned int>(sqrt(x)); y++) {
if (x % y == 0) {
prime = false;
}
}
if (prime) {
std::cout<<"prime";
}
}