https://vjudge.net/problem/19685/origin
小電力のフェルマーの定理急速な最適化
フェルマーの小定理の最適化のほか、注意深い222この場合は、002、つまり、0番目の0が存在しますので、実際の答えはゼロであります
#include <iostreamの> する#include <cstdioを> する#include <キュー> の#include <アルゴリズム> の#include <cmath> の#include <CStringの> に#define INF 2147483647 の#define N 47000 の#define P(A)のputchar(A) の#define以下のための(I、a、b)は(++ I;私は= Bを<長い長iは=)のために使用した名前空間STDを、 長い長いT; 長い長い、X、Y、M、CNT。 長い長いプライム[N]; BOOL VIS [N]。 ボイドに(長いロング・X){ 長い 長い Y = 1。チャー C = GETCHAR(); X = 0 。 一方、(C < ' 0 ' || C> ' 9 '){ もし、(C == ' - ')Y = - 1 ; C = GETCHAR();} 一方、(C <= ' 9 ' && C> = ' 0 '){X =(X << 1)+(X << 3)+ C- ' 0 ' ; C = GETCHAR();} X * = Y。 長い 長いX){ 場合(X < 0){P(' - '); X = - X;} もし(X> 9)O(X / 10 )。 P(Xの%10 + ' 0 ' )。 } 長い 長い KSM(長い 長い、長い 長いB){ 長い 長い R = 1 。 一方、(B> 0 ){ 場合(B&1 ) R = R *% M。= A *%のM。 B >> = 1 。 } 戻りR。 } ボイドオイラー(){ VIS [ 1 ] = 1 。 (Iについて2 、N){ 場合(!VIS [I])プライム[++ CNT] = I。 以下のための(長い 長い J = 1 ; iが素数[j]を* && J <= CNT <= N; J ++ ){ VIS [iが素数* [J] = 1 。 もし(I%、プライム[J] == 0 ) ブレーク。 } } } INT メイン(){ オイラー()。 一方、(scanf関数(" %LLD%LLD%LLD "、およびX&Y、&M)=!EOF){ X%= M。 もし(!VIS [M]) のY%= M- 1 。 もし(X &&!Y) Y = 1 。 O(KSM(X、Y)); P(' の\ n ' ); } 戻り 0 。 }