码迷,mamicode.com
首页 > 其他好文 > 详细

第五周 8.16-8.22

时间:2015-08-16 15:01:51      阅读:114      评论:0      收藏:0      [点我收藏+]

标签:

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

 

第五周 8.16-8.22

标签:

原文地址:http://www.cnblogs.com/Aguin/p/4734079.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!