C++の素数のmodの下で力の力を見つける
この問題では、4つの値A、B、C、M(素数)が与えられます。私たちの仕事は、素数のmodの下で力の力を見つけることです。
(A ^(B ^ C))(mod M)の値を見つける必要があります。
問題を理解するために例を見てみましょう
入力
A = 3, B = 6, C = 2, M = 11
出力
3
説明
(A ^(B ^ C))=(3 ^(6 ^ 2))=(3 ^(36))(mod 11)=3
ソリューションアプローチ
この問題の簡単な解決策は、(A ^(B ^ C))の値を直接計算することです。これは、最初に(B ^ C)の値を計算し、次に(A ^(B ^ C))を計算することによって行われます。そのmodを取る。 (B ^ C)は、タスクになる可能性のある巨大なフィギュアの保存になります。そして、計算はオーバーフローにつながる可能性があります。
したがって、より効率的なアプローチは、フェルマーの小定理を使用して値を見つけることです。
定理は、
a^(m-1) = 1 (mod M) where m is a prime number.
これを使用して、問題のbcをいくつかの形式に変換します
x *(M-1)+ y、指定されたMの値。
フェルマーの定理を使用すると、部分A ^(x *(M-1))は1になります。
これにより、計算がに減り、A y の値が見つかります。 。
yの値は、次のように計算できます。
B c =x *(M-1)+ y
これにより、B c を除算したときにyが余りになります。 (M-1)、
したがって、y =B c %(M-1)
これにより、見つける必要があるため、結果が非常に簡単になります。
(A ^ ((B^C) %( M-1)) % M
ソリューションの動作を説明するプログラム
例
#include<iostream> using namespace std; int calcPowerMod(int x, int y, int p) { int powMod = 1; x = x % p; while (y > 0) { if (y & 1) powMod = (powMod*x) % p; y /=2; // y = y/2 x = (x*x) % p; } return powMod; } int findPowerOfPowerMod(int A, int B, int C, int M) { return calcPowerMod(A, calcPowerMod(B, C, M-1), M); } int main() { int A = 3, B = 6, C = 2, M = 11; cout<<"The power of power under modulo is "<<findPowerOfPowerMod(A, B, C, M); return 0; }
出力
The power of power under modulo is 3
-
C++の平衡素数
平衡素数 numberは、前の素数と次の素数で同じ差がある素数です。つまり、最も近い次の素数と前の素数の平均です。 素数が平衡素数になるには、次の式に従う必要があります- P n =(P(n-1)+ P(n + 1))/ 2 ここで、nは、順序付けられた素数のセット内の素数pnのインデックスです。 素数の順序集合:2、3、5、7、11、13、…。 まず、平衡素数は5、53、157、173、… この問題では、数nが与えられ、n番目の平衡素数を見つける必要があります。 例を見てみましょう Input : n = 3 Output : 157 このため、素数を生成し、配列に
-
nCrがC++で指定された素数で割り切れるかどうかを調べます
3つの変数N、R、およびPがあるとします。NとRは、 Nを取得するために使用されます。 C R Pは素数です。 Nかどうかを確認する必要があります C R はPで割り切れる。いくつかの数N=7、R =2、P =3があるとすると、 7 C 2 =21、これは3で割り切れるので、出力はtrueになります。 N C R R! +(N-R)! 例 #include <iostream> using namespace std; int getPower(int n, int p) { int pow = 0; w