CF edu81 D数学

奇妙な、これは、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を返します。
}

  

おすすめ

転載: www.cnblogs.com/edmunds/p/12296381.html