素数编程 - 我做错了什么?
我,我是一个初学者在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)
你应该让这样的:
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就足够了。
谢谢你的建议。只是一件小事:这个代码不适用于数字4,因为它不会检查它2(因为2不小于4 \ 2)这不是一个大问题,因为我可以让4成为一个例外。 – Person1 2014-09-27 22:19:03
@miv或者你可以把'i
您可以通过使用“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";
}
}
虽然这个方法很有用,但我不认为他会需要它;考虑到他试图实现不同算法的事实,甚至我平庸的计算机能够在不到半秒的时间内计算出10位数字 – 2014-09-27 20:29:22
是的,但是我们不应该追求完美吗? – MKAROL 2014-09-27 20:36:46
我们都应该解释为什么OP的代码不起作用,并且为更好的算法提供很好的建议。 – 2014-09-27 21:05:42
谢谢你,其他人你的答案。我现在明白了。 – Person1 2014-09-27 20:56:23
顺便说一下,我是这个网站的新手,所以我不知道它是如何工作的,但我不明白为什么人们会投我的问题。我真的需要这个答案,我一直在试图解决这个问题一个星期。也许这是我的语言,但我又不是英语母语的人。我想我必须不那么敏感。 – Person1 2014-09-27 21:05:46
欢迎来到SO,被警告,它有时候很粗糙......:/有时候,只需要在这里有一个厚厚的皮肤。 (PS:我看不出你的语言有什么问题,但我也不是母语英语) – deviantfan 2014-09-27 21:13:52