题意:
思路:
根据欧拉定理,a^(phi(n)-1)为a mod n的逆元
1 var prime,cnt:array[1..100]of longint; 2 s,ans,x,mo,k,phi,tmp:int64; 3 i,m,n,j:longint; 4 5 function mult(x,y:int64):int64; 6 var tmp:int64; 7 begin 8 tmp:=x; 9 mult:=1; 10 while y>0 do 11 begin 12 if y and 1=1 then mult:=mult*tmp mod mo; 13 tmp:=tmp*tmp mod mo; 14 y:=y>>1; 15 end; 16 end; 17 18 function ins(x,y:longint):longint; 19 var i:longint; 20 begin 21 for i:=1 to m do 22 while x mod prime[i]=0 do 23 begin 24 cnt[i]:=cnt[i]+y; 25 x:=x div prime[i]; 26 end; 27 exit(x); 28 end; 29 30 begin 31 assign(input,'iqtest.in'); reset(input); 32 assign(output,'iqtest.out'); rewrite(output); 33 readln(n,mo); 34 k:=mo; phi:=mo; 35 for i:=2 to trunc(sqrt(mo)) do 36 if k mod i=0 then 37 begin 38 inc(m); prime[m]:=i; phi:=phi div i*(i-1); k:=k div i; 39 while k mod i=0 do k:=k div i; 40 end; 41 if k>1 then begin inc(m); prime[m]:=k; phi:=phi div k*(k-1); end; 42 s:=1; 43 for i:=1 to n do 44 begin 45 tmp:=s; 46 for j:=1 to m do tmp:=tmp*mult(prime[j],cnt[j]) mod mo; 47 read(x); 48 ans:=(ans+tmp*x mod mo) mod mo; 49 if i<n then s:=s*ins(n-i,1) mod mo*mult(ins(i,-1),phi-1) mod mo; 50 end; 51 writeln(ans); 52 close(input); 53 close(output); 54 end.