素数程序-我做错了什么

Prime number Program - what am I doing wrong?

本文关键字:错了 什么 程序      更新时间:2023-10-16

I,我是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";
     }
}

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

谢谢。我希望它不是太简单,尽管我担心它是…

用逗号连接条件不会达到预期效果
逗号运算符有有效的应用程序,但在这种情况下,
a"answers"更合适:

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

您应该更改

while(y < x, remainder != 0)

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

逻辑运算符"and"被写成&amp;在C++(和许多其他编程语言)中。

你应该这样做:

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就足够了。

您可以通过使用"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";
   }
 }