素数编程 - 我做错了什么?

问题描述:

我,我是一个初学者在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"; 
    } 
} 

问题是程序不会打印任何数字的“素数”。我想有更有效的方法来编写这样一个程序,但是你能告诉我我做了什么问题吗?

谢谢。我希望这不是太简单了,但恐怕这是...

你应该改变

while(y < x, remainder != 0) 

while(y < x && remainder != 0) 

逻辑运算符“和”写为& &在C++(和许多其他编程语言)中。

用逗号连接条件不会达到您所期望的。
有逗号操作符份有效申请,但在这种情况下,
一个“和”更适合:

while(y<x && remainder!=0) 
+0

谢谢你,其他人你的答案。我现在明白了。 – Person1 2014-09-27 20:56:23

+0

顺便说一下,我是这个网站的新手,所以我不知道它是如何工作的,但我不明白为什么人们会投我的问题。我真的需要这个答案,我一直在试图解决这个问题一个星期。也许这是我的语言,但我又不是英语母语的人。我想我必须不那么敏感。 – Person1 2014-09-27 21:05:46

+0

欢迎来到SO,被警告,它有时候很粗糙......:/有时候,只需要在这里有一个厚厚的皮肤。 (PS:我看不出你的语言有什么问题,但我也不是母语英语) – deviantfan 2014-09-27 21:13:52

你应该让这样的:

if(x==2 || x==3) 
    cout<<"prime"; 
else 
    for(int i = 2; i < x/2; ++i) 
     if(x % i == 0) 
     { 
      cout<<"Not prime"; 
      break; 
     } 

否则总理。 P.S.您不需要检查从1到x的数字。从1到x/2就足够了。

+0

谢谢你的建议。只是一件小事:这个代码不适用于数字4,因为它不会检查它2(因为2不小于4 \ 2)这不是一个大问题,因为我可以让4成为一个例外。 – Person1 2014-09-27 22:19:03

+1

@miv或者你可以把'i 2014-09-28 01:25:52

您可以通过使用“Eratosthenes筛”来减少测试是否为素数所需的时间。 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"; 
    } 
} 
+0

虽然这个方法很有用,但我不认为他会需要它;考虑到他试图实现不同算法的事实,甚至我平庸的计算机能够在不到半秒的时间内计算出10位数字 – 2014-09-27 20:29:22

+0

是的,但是我们不应该追求完美吗? – MKAROL 2014-09-27 20:36:46

+1

我们都应该解释为什么OP的代码不起作用,并且为更好的算法提供很好的建议。 – 2014-09-27 21:05:42