2

数が素数か合成数かを判断するプログラムを作成しようとしています。私はここまで来ました。それが機能するように、何かアイデアを教えていただけますか?ただし、すべての素数は になりますが、コンポジットには r>0 と r==0 の両方の値があるため、それらは常に素数として分類されます。どうすればこれを修正できますか?

int main()
{
    int pNumber, limit, x, r;               
    limit = 2;
    x = 2;

    cout << "Please enter any positive integer: " ;
    cin >> pNumber;

    if (pNumber < 0)
    {
        cout << "Invalid. Negative Number. " << endl;
        return 0;
    }
    else if (pNumber == 0)
    {   
        cout << "Invalid. Zero has an infinite number of divisors, and therefore neither composite nor prime." << endl;
        return 0;
    }
    else if (pNumber == 1)
    {
        cout << "Valid. However, one is neither prime nor composite" << endl;
        return 0;
    }
    else
    {
        while (limit < pNumber)
        {
            r = pNumber % x;
            x++;
            limit++;

            if (r > 0)
                cout << "Your number is prime" << endl;
            else 
            {
                cout << "Your number is composite" << endl;
                return 0;
            }
        }
    }

    return 0;
}
4

8 に答える 8

3

http://en.wikipedia.org/wiki/Prime_numberhttp://en.wikipedia.org/wiki/Primality_testをチェックしてください

最も単純な素数性テストは次のとおりです。入力数値 n が与えられた場合、2 から n − 1 までの任意の整数 m が n を除算するかどうかをチェックします。n が任意の m で割り切れる場合、n は合成であり、それ以外の場合は素数です。

于 2010-03-08T03:13:05.770 に答える
0

最も簡単な方法は、与えられた数 n に対するもので、2 から sqrt(n) までの任意の数で完全に割り切れる場合、その合成数、または素数です。

于 2010-03-08T21:50:56.697 に答える
0

x1 つには、 whereを見つけたら、ループから抜け出したいと思うでしょうpNumber % x == 0。素数でないことを証明するにpNumberは、1 より大きく 1 よりも小さい因数を 1 つ見つけるだけで済みます。これ以上検索しても意味がありません。pNumber1つも見つからずにたどり着いた場合は、プライムであるx = pNumberことがわかります。pNumber実際には、 の平方根がpNumber見つからなくても、それは素数です。わかる?

于 2010-03-08T03:20:26.393 に答える
0

あなたがこれまで何を教えられてきたかはわかりませんが、私の離散数学の先生はMiller-Rabin testのファンでした。これは非常に正確なテストであり、コーディングが非常に簡単です。いくつかの基本的なテストでは、カーマイケル数を持っている可能性はほとんどありません。勉強がそこまで進んでいない場合は、数の基本的な割り算のルールに固執するだけです。

于 2010-03-08T03:32:17.603 に答える
-2

こんにちは、math.h ヘッダー ファイルを使用せずにこれを実行しました。turboc コンパイラを使用しました。次のプログラムは、数値が素数か合成数かをチェックします。

                   #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 composite " ;
                                                                       }
                                                             if(count==2)
                                                                       {
                                      cout<<"\nThe numner is prime";
                                                                       }
                                 }

                                void main()
                                          {
                                            clrscr();
                                            prime k;
                                            k.check();
                                            getch();
                                          }
于 2012-10-29T15:21:03.683 に答える