C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

C++で指定された範囲内のx^2 =1(mod p)の解の数を数えます


整数xとpが与えられます。目標は、方程式-x 2 の解の数を見つけることです。 =1(mod p)、xが範囲[1、N]にあるようにします。

これを行うには、1からNまでトラバースし、各数値をxチェックとして(x * x)%p==1かどうかを確認します。はいの場合は、カウントを増やします。

例を挙げて理解しましょう。

入力 − n =5、p =2

出力 −ソリューションの数− 3

説明 −範囲1〜5。

12=1%2=1, count=1
22=4%2=0, count=1
32=9%2=1, count=2
42=16%2=0, count=2
52=25%2=1, count=3
Total number of solutions=3.

入力 − n =3、p =4

出力 −ソリューションの数− 2

説明 −範囲1〜3。

12=1%4=1, count=1
22=4%4=0, count=1
32=9%4=1, count=2
Total number of solutions=2

以下のプログラムで使用されるアプローチは次のとおりです

  • 2つの変数nとpを取ります。

  • 関数solutionsCount(int n、int p)は、パラメーターnとpの両方を取り、方程式x 2 の解の数を返します。 %p ==1(またはx 2 =1(mod p))。

  • x=1からx=nまで、x * x ==1かどうかを確認し、はいの場合はカウントをインクリメントします。

  • ループの最後に、カウントにはソリューションの数が含まれます。

  • 結果としてカウントを返します。

#include<bits/stdc++.h>
using namespace std;
int solutionsCount(int n, int p){
   int count = 0;
   for (int x=1; x<=n; x++){
      if ((x*x)%p == 1)
         { ++count; }
   }
   return count;
}
int main(){
   int n = 8, p = 3;
   cout<<"Number of solutions :"<<solutionsCount(n, p);
   return 0;
}

出力

上記のコードを実行すると、次の出力が生成されます-

Number of solutions : 6

  1. C++で16進数を数える

    開始と終了の範囲が与えられ、タスクは、指定された範囲に存在する16進数またはアルファベットの数を計算することです。 16進アルファベットとは何ですか? コンピューター用語では、16進数は、16を底とする数値です。これは、2進数を16ビットで表すことができることを意味します。 0から15までの整数で構成されます。ここで、10はA、11はB、12はC、13はD、14はE、15はFとして表されます。 したがって、以下のプログラムでは、範囲が16進アルファベットで構成されているかどうかを確認することがタスクです。 例 Input − start = 10, End = 13 Outp

  2. C++で指定された範囲の階乗数をカウントします

    変数が保持する整数値から始まり、たとえば開始から変数の終了までの範囲が与えられます。タスクは、指定された範囲で使用可能な階乗数の総数をカウントすることです。 階乗数とは 数値の階乗は、数値の桁を1で除算しながら、数値の桁を乗算することによって計算されます。これは、記号「!」で示されます。つまり、0!、1!、2!、3!、5!、...です。 、等。 0の階乗!と1!常に1です。 I.e. factorial of 2 = 2 * (2-1) = 2 * 1 = 2       factorial of 3 = 3 * (3-1) * (2-1) = 3 * 2 *