Zball in Tina Town(数论规律题+特判+较大数判是否为素数的正确姿势)
2015-08-15 23:10
330 查看
Link:http://acm.hdu.edu.cn/showproblem.php?pid=5391
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 138 Accepted Submission(s): 98
Problem Description
Tina Town is a friendly place. People there care about each other.
Tina has a ball called zball. Zball is magic. It grows larger every day. On the first day, it becomes 1 time
as large as its original size. On the second day,it will become 2 times
as large as the size on the first day. On the n-th day,it will become n times
as large as the size on the (n-1)-th day. Tina want to know its size on the (n-1)-th day modulo n.
Input
The first line of input contains an integer T,
representing the number of cases.
The following T lines,
each line contains an integer n,
according to the description.
T≤105,2≤n≤109
Output
For each test case, output an integer representing the answer.
Sample Input
Sample Output
Source
BestCoder Round #51 (div.2)
官方题解:
这题就是求 (n-1)!modn(n−1)! mod n
如果nn为合数,显然答案为0.
如果nn为素数,那么由威尔逊定理可得答案为 n-1n−1
注意有个trick为 nn =
4
注意:输入的n比较大,要先打素数表再判是否为素数才不会TLE!!!
AC code:
Zball in Tina Town
Time Limit: 3000/1500 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submission(s): 138 Accepted Submission(s): 98
Problem Description
Tina Town is a friendly place. People there care about each other.
Tina has a ball called zball. Zball is magic. It grows larger every day. On the first day, it becomes 1 time
as large as its original size. On the second day,it will become 2 times
as large as the size on the first day. On the n-th day,it will become n times
as large as the size on the (n-1)-th day. Tina want to know its size on the (n-1)-th day modulo n.
Input
The first line of input contains an integer T,
representing the number of cases.
The following T lines,
each line contains an integer n,
according to the description.
T≤105,2≤n≤109
Output
For each test case, output an integer representing the answer.
Sample Input
2 3 10
Sample Output
2 0
Source
BestCoder Round #51 (div.2)
官方题解:
这题就是求 (n-1)!modn(n−1)! mod n
如果nn为合数,显然答案为0.
如果nn为素数,那么由威尔逊定理可得答案为 n-1n−1
注意有个trick为 nn =
4
注意:输入的n比较大,要先打素数表再判是否为素数才不会TLE!!!
AC code:
#include<stdio.h> #include<string.h> #include<stdlib.h> #include<queue> #include<math.h> #include<vector> #include<map> #include<set> #include<cmath> #include<string> #include<algorithm> #include<iostream> #define LL long long #define MAXN 1000010 using namespace std; const int INF=0x3f3f3f3f; const int N = 100005; const int MOD = 9901; LL n,ans; bool prime ; int p ;//保存素数 int cnt; void isprime()//素数筛选 { cnt = 0; memset(prime,true,sizeof(prime)); for(int i=2; i<N; i++) { if(prime[i]) { p[cnt++] = i; for(int j=i+i; j<N; j+=i) prime[j] = false; } } } bool Judge(LL A)//判断是否为素数,是素数则返回true { for(int i=0; p[i]*p[i] <= A; i++) { if(A % p[i] == 0) { return false; } } return true; } int main() { //freopen("D:\in.txt","r",stdin); int t; isprime(); scanf("%d",&t); while(t--) { scanf("%I64d",&n); if(n==4)//特判 { printf("2\n"); } else if(!Judge(n)) { printf("0\n"); } else { printf("%I64d\n",n-1); } } return 0; }
相关文章推荐
- <一>java数据结构与算法 数组
- Oracle表联结之嵌套循环
- Java内存分配和垃圾回收
- Expression 表达式树学习整理
- Android PopupWindow
- Java NIO系列教程(二) Channel
- Cookie的作用域
- 自定义异常时如何定义checked异常和unchecked异常
- HDU 5391 Zball in Tina Town(数论——威尔逊定理)——BestCoder Round #51(div.2)
- ZOJ - 3469 Food Delivery(区间DP)
- 安装 GitHub desktop for windows 失败
- handle()
- Android开发PopupWindow showAtLocation用法
- String和StringBuffer的equals方法比较
- 笨笨熊搬家——交通(java)
- c++ public, protected, private成员变量,成员函数继承和访问规则实例代码
- Gym - 100203H Highways 最小生成树
- Nginx 引入线程池,提升 9 倍性能
- 自然数和分解
- 多线程基本概论multithread