gcd(a ^ n、c)を見つけます。ここで、a、n、cはC++で1から10^9まで変化します。
2つの数値のGCDを見つける必要があります。そのうちの1つの数値は(109 ^ 109)まで大きくなる可能性があり、longなどの一部のデータ型には格納できません。したがって、数値がa =10248585、n =1000000、b =12564の場合、GCD(a ^ n、b)の結果は9になります。
数値が非常に長いため、ユークリッドの互除法を使用することはできません。 O(log n)の複雑さのべき乗剰余を使用する必要があります。
例
#include<iostream> #include<algorithm> using namespace std; long long power(long long a, long long n, long long b) { long long res = 1; a = a % b; while (n > 0) { if (n & 1) res = (res*a) % b; n = n>>1; a = (a*a) % b; } return res; } long long bigGCD(long long a, long long n, long long b) { if (a % b == 0) return b; long long exp_mod = power(a, n, b); return __gcd(exp_mod, b); } int main() { long long a = 10248585, n = 1000000, b = 12564; cout << "GCD value is: " << bigGCD(a, n,b); }
出力
GCD value is: 9
-
GCDを見つけるためのC++プログラム
2つの数値の最大公約数(GCD)は、両方を除算する最大の数値です。 例:45と27の2つの数字があるとします。 45 = 5 * 3 * 3 27 = 3 * 3 * 3 したがって、45と27のGCDは9です。 2つの数値のGCDを見つけるプログラムは次のとおりです。 例 #include <iostream> using namespace std; int gcd(int a, int b) { if (b == 0) return a; return gcd(b, a % b); } int
-
現在のCまたはC++標準ドキュメントはどこにありますか?
現在のC標準ドキュメントはANSIWebストアで見つけることができます。 https://webstore.ansi.org/RecordDetail.aspx?sku=INCITS%2FISO%2FIEC+9899-2012 現在のC++標準ドキュメントは、ISO C ++Webサイトで購入できます-https://www.iso.org/standard/68564.html ISO C ++標準の作業ドラフトは、https://isocpp.org/std/the-standardでも入手できます。