奇妙な、これは、BCDは、新たな発芽されていません。まずDバーを掲載しました。困難ではありませんが、私はしません。問題の唯一の解決策を読んで、ほとんど理解しています。おそらく、単純な説明がありますか?
問題の意味:あなたは、どのように多くのxを依頼するように与えられ、そしてm、(M)=(+ X、M)、ここでは1 <= <mに対して<10 ^ 10
答えがm /(m)はオイラー関数の値であります
まず、(+ X、M)=((+ X)%M、M)。もし+ X> M、次に(+ X、M)=(A + XM、M)=((+ X)%M、M)ので、明確に+ X <= Mの場合
問題SOおよびXの数 '=(+ X)%mを、0 <= X' <M、その結果(M)=(X」、m)を最小化します
そして '(/ D、M / D与えるために、mは(D =(M)=をx)は、x')= 1、および各ステップ上記スラストリバー(Xの '/ D入手可能なX'、とすることができますX「入手可能x)は、したがって、ライン上のM / Dオイラー関数値の
次のコードを掲載
#include <ビット/ STDC ++ H> 名前空間STDを使用して、 #defineは長い長いっ LL GCD(-1,11,11- b)は { (B == 0)を返す場合。 他のリターンGCD(B、%b)は、 } INT)(主 { LL、M、I、ANS、N、T。 cinを>>トン。 一方、(t--) { CIN >> M。 N = M / GCD(M); ANS = N。 (I ++; I <= INT(SQRT(N))は、i = 2)のための { IF(N%I == 0)ANS = ANS / Iは、(i-1)*。//先除以I再乘I-1、避免爆掉長い長い 一方(N%I == 0)N / = I。 } IF(N> 1)ANS = ANS / N *(N-1)。 coutの<< ANS <<てendl; } 0を返します。 }