C++ 简单素数程序。。。。我的代码/脚本有什么问题?

C++ 简单素数程序。。。。我的代码/脚本有什么问题?,c++,loops,for-loop,numbers,C++,Loops,For Loop,Numbers,我想知道我能在调试或发现程序中的错误方面得到一些帮助。目标是获取用户输入,然后显示从输入到零、从最大素数到最低素数的素数 问题在于,输出包括用户输入,用户输入本身可能是素数,也可能不是素数,并重复素数数次:( 另外,我想知道为什么不包括2 我的代码: #include <iostream> #include <cmath> using namespace std; int main() { int prime, division, input; cout

我想知道我能在调试或发现程序中的错误方面得到一些帮助。目标是获取用户输入,然后显示从输入到零、从最大素数到最低素数的素数

问题在于,输出包括用户输入,用户输入本身可能是素数,也可能不是素数,并重复素数数次:( 另外,我想知道为什么不包括2

我的代码:

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int prime, division, input;
    cout << "Please enter a number you wish to count down prime numbers from." << endl;
    cin >> input;

    for (prime = input ; prime >=2 ; prime-- )
    {
        for (division = 2 ; division < prime ; division++ )
        {
            if (prime % division == 0)
            {
            break;
            }
            else
            {
            cout << prime << " ";
            }
        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
整数素数,除法,输入;
不能输入;
对于(素数=输入;素数>=2;素数--)
{
对于(除法=2;除法<素数;除法++)
{
if(素数%除法==0)
{
打破
}
其他的
{
cout对于第一个问题:

对于9,当
division==2
时,
9%2==1
,则打印9。而不应使用标志值来指示数字是否为素数,并在确定该数字为素数后打印该数字

对于2,编辑:当
prime==2
时,因为
division
是执行内部循环的条件,所以内部循环不运行就退出。所有信用都归Marlon!

试试这个代码

#include <iostream>
#include <cmath>
using namespace std;

int main()
{
    int prime, division, input;
    cout << "Please enter a number you wish to count down prime numbers from." << endl;
    cin >> input;




    for (prime = input ; prime >=2 ; prime--)
    {
        boolean isDivisible = false;
        for (division = 2 ; division < prime ; division ++)
        {
            if (prime % division == 0)
            {
                isDivisible = true;
            }
        }
        if (isDivisible == false)
        {
            cout << prime << " ";
        }
    }
    return 0;
}
#包括
#包括
使用名称空间std;
int main()
{
整数素数,除法,输入;
不能输入;
对于(素数=输入;素数>=2;素数--)
{
布尔值isDivisible=false;
对于(除法=2;除法<素数;除法++)
{
if(素数%除法==0)
{
isDivisible=true;
}
}
如果(isDivisible==false)
{

cout检查内部for循环。每次运行循环时,初始值设定项都会重置为2。然后对可疑的素数执行Mod 2。如果得到0,您真正知道的是该数是偶数。这可能会导致您很快说该数不是素数,但2 Mod 2是0,2是素数。在循环之后,“除法”变为3。15 mod 3是0。在这一点上,你打破了循环,但15不是素数。检查你的确定素数的算法。你可以让它检查已知素数,但这不够动态。还有其他方法,其中之一是围绕确定可疑素数的平方根。最后,你可以做一些尝试od旧(长)纸笔调试。

您的内部循环不正确。它不是打印素数,只是奇数。它检查一个数字在第一次迭代中是否可以被2整除,并且一个偶数总是可以被整除。因此,如果该数字是偶数,内部循环总是会中断,但如果是奇数,它会打印该数字,并继续这样做,直到循环结束终止或终止

让我们试着用一个例子来说明这一点,外循环是9。内循环将检查它是否可被2整除,因为它不是。它将打印出数字并再次继续。下一次迭代将检查它是否可被3整除,因为它是

试着用一个函数来检查一个数是否是素数,这使它更模块化

bool prime(int num)
{
    int root = sqrt(num);
    if(num == 2)
        return true;
    if(num%2 == 0)
        return false;
    for(int i=3;i<=root+1;i=i+2)
        if(num % i == 0)
           return false;
    return true;
}
bool素数(int num)
{
int root=sqrt(num);
如果(num==2)
返回true;
如果(数值%2==0)
返回false;

对于(inti=3;i这是一个程序,它告诉你输入的数字是否是素数。任何数字都可以被一个总是小于它的数字整除。 对于素数,它们完全可以被1和它本身整除; 所以我使用了一个计数器变量,它计算一个数被一个或多个小于它的数完全整除的次数。 素数的计数将始终为2,而其他素数的计数将超过2。 计数将是一对一。。。 所以程序如下

    #include<iostream.h>
    #include<conio.h>
    class prime
    {
       int a;
       public:
         void check();

    };
       void prime::check()
                         {
                          cout<<"Insert a number";
                          cin>>a;
                          int count=0;
                          for(int i=a;i>=1;i--)
                             {
                                if(a%i==0)
                                      {
                                        count++;
                                       }
                               }
                                 if(count==1)
                                           {
                                cout<<"\nOne is neither prime nor composite";
                                            }
                                  if(count>2)
                                           {
                                cout<<"\nthe number is not prime its composite" ;
                                           }
                                 if(count==2)
                                          {    
                                cout<<"\nthe numner is prime";
                                           }
             }

     void main()
     {
      clrscr();
     prime k;
     k.check();
     getch();
     }
#包括
#包括
类素数
{
INTA;
公众:
无效检查();
};
void prime::check()
{
库塔;
整数计数=0;
对于(int i=a;i>=1;i--)
{
如果(a%i==0)
{
计数++;
}
}
如果(计数=1)
{

对于他的第二个问题,当
prime
为2时,第二个循环的条件将计算为false(
2<2
),并立即退出循环。有一件事不是你的问题:除法只需向上(包括)sqrt(prime)@马龙啊,废话,说得太快了。谢谢!谢谢你的贡献。@Marlon,如果我想修正这个表达式,我可以简单地把它改成除法吗@albertoroberto:first:不要改成除法,否则素数%prime永远是0,那么你就永远不会得到素数了!只要修正第一部分,第二部分也会是修正了。你可以用一个布尔值来检查当前的“素数”是否为素数;在内部循环完成后,如果您仍然确定它是素数,请打印它;无论何时您发现它是复合数,请将布尔值更改为false。您应该创建一个单独的函数来查找数字是否为素数。对于数字n,除了它本身之外,它不会与大于n/2的数字相乘。Us这是为了提高效率。对于15,从8到14不会有倍数。Script。C++不是脚本语言,你输入的名字是代码或程序,不是脚本。谢谢布莱恩!它对布尔变量很好,但是我想知道你是否知道没有它的方法会怎样?我正在网上学习,一个d只能使用所涵盖章节中的知识:(布尔变量在这里也很好:)您考虑过吗
      #include<iostream.h>
      #include<stdio.h>
      #include<conio.h>
        class prime
        {
               int a;
               int i;
        public:
          void display();
        };

          void prime::display()
                   {
                     cout<<"Enter any number to find primes less than it";
                     cin>>a;
                        int count=0;
                     for(int j=a;j>=1;j--)
                      {
                        for(int i=1;i<=j;i++)
                             {
                                if(j%i==0)
                                         {
                                           count++;
                                          }
                               }
                        if(count==2)
                                   {
                                     cout<<"\n"<<j;
                                    }
                         count=0;
                        }
                  }
     void main()
     {
        clrscr();
        prime k;
        k.display();
        getch();
      }