简单的Prime数字程序....我的代码/脚本有什么问题?

时间:2011-10-27 01:43:40

标签: c++ loops for-loop numbers

我想知道我可以在我的程序中调试或发现错误时得到一些帮助。目标是获取用户输入,然后将输入的素数显示为零,最大素数到最低值。

问题是输出包括用户输入,其本身可能是素数,也可能不是素数,并且重复素数几次:( 另外,我想知道为什么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;
}

我的输出:

请输入您希望倒数的素数。 15

15 13 13 13 13 13 13 13 13 13 13 13 11 11 11 11 11 11 11 11 11 9 7 7 7 7 7 5 5 5 3

感谢那些帮助的人!

5 个答案:

答案 0 :(得分:1)

这是一个程序,它告诉输入数字是否为素数。任何数字都可以被一个总是小于它的数字整除。 在素数的情况下,它们可以完全被1和它自身整除; 所以我使用了一个计数器变量,它计算一个数字可以被一个或多个数字完全整除的次数。 对于素数,计数总是2,对于其他数字,计数将超过2。 数量为1比1 ... 所以该计划如下......

    #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();
     }

打印小于作为输入给出的数字的所有素数;代码如下:

      #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();
      }

答案 1 :(得分:0)

对于第一个问题:

对于9,当division == 29 % 2 ==1时,打印9。比你应该有一个标志值来表示数字是否为素数,并在你确定后打印数字它是素数。

For 2,EDIT:当prime == 2时,因为division < prime是内循环执行的条件,内循环退出而不运行。所有学分都归Marlon所有!

答案 2 :(得分:0)

试试此代码

#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;
}

答案 3 :(得分:0)

检查你的内在循环。每次运行循环,初始化程序重置为2.然后你在疑似素数上做Mod 2。如果你得到0,你真正知道的是数字是偶数。这可能会让你快速说出这个数字不是素数,但是2 mod 2是0,而2是素数。循环之后,“除法”变为3. 15 mod 3为0.此时,你突破循环,但15不是素数。检查您的算法以确定素数。你可以检查已知的素数,但这不够动态。还有其他方法,其中一种方法围绕确定可疑素数的平方根。最后,你可以做一些旧的(长)纸笔调试。

答案 4 :(得分:0)

你的内循环不正确。它不是印刷素数,只是奇数。它检查在第一次迭代期间一个数字是否可被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;
}