素数计划 - 我做错了什么?

时间:2014-09-27 20:00:06

标签: c++ primes

我,我是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”。我想有更有效的方法来编写这样的程序,但是你能告诉我这样做的问题是什么?

谢谢。我希望它不是太简单,虽然我担心它是......

4 个答案:

答案 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";
   }
 }