8.16
补BC。
HDU 5391 Zball in Tina Town
求(n-1)!%n。
首先合数的话前面必然有它的因子。所以是0。
质数我打表才发现是n-1。
然而有一个著名的威尔逊定理(渣根本没听过。
坑在于n=4时是2。没判就死了QAQ。
1 # include <iostream> 2 # include <cstdio> 3 using namespace std; 4 typedef long long LL; 5 6 LL qpow(int a,int b,int r) 7 { 8 LL ans=1,buff=a; 9 while(b) 10 { 11 if(b&1)ans=(ans*buff)%r; 12 buff=(buff*buff)%r; 13 b>>=1; 14 } 15 return ans; 16 } 17 18 bool Miller_Rabbin(int n,int a) 19 { 20 int r=0,s=n-1,j; 21 if(!(n%a)) 22 return false; 23 while(!(s&1)){ 24 s>>=1; 25 r++; 26 } 27 LL k=qpow(a,s,n); 28 if(k==1) 29 return true; 30 for(j=0;j<r;j++,k=k*k%n) 31 if(k==n-1) 32 return true; 33 return false; 34 } 35 36 bool IsPrime(int n) 37 { 38 int tab[]={2,3,5,7}; 39 for(int i=0;i<4;i++) 40 { 41 if(n==tab[i]) 42 return true; 43 if(!Miller_Rabbin(n,tab[i])) 44 return false; 45 } 46 return true; 47 } 48 49 int main(void) 50 { 51 int T; cin>>T; 52 while(T--) 53 { 54 int n; scanf("%d",&n); 55 if(n==4) printf("2\n"); 56 else if(!IsPrime(n)) printf("0\n"); 57 else printf("%d\n",n-1); 58 } 59 return 0; 60 }
Aguin
时间: 2024-10-06 00:22:02