HDU 5391Z ball in Tina Town 数论

 题目链接:

hdu:http://acm.hdu.edu.cn/showproblem.php?pid=5391

bc:  http://bestcoder.hdu.edu.cn/contests/contest_chineseproblem.php?cid=616&pid=1001

Zball in Tina Town

 
 Accepts: 356
 
 Submissions: 2463
 Time Limit: 3000/1500 MS (Java/Others)
 
 Memory Limit: 262144/262144 K (Java/Others)
问题描述
Tina Town 是一个善良友好的地方,这里的每一个人都互相关心。
Tina有一个球,它的名字叫zball。zball很神奇,它会每天变大。在第一天的时候,它会变大11倍。在第二天的时候,它会变大22倍。在第nn天的时候,它会变大nn倍。
zball原来的体积是11。Tina想知道,zball在第n-1n1天时的体积对nn取模是多大呢?
Tina是一个蠢蠢的女孩子,当然不会算啦,所以她请你帮她算出这个答案呢。
输入描述
第一行一个正整数TT,表示数据组数
接下来TT行,每行一个正整数nn,意义如题面所述
T leq 10^5,2 leq n leq 10^9T105,2n109
输出描述
对于每组数据,输出一个正整数,表示答案。
输入样例
2
3
10
输出样例
2
0

题解:

  题目是叫我们求(n-1)!%n,由于n很大,所以不能直接求,先用暴力求比较小的数(1到1000),找规律,发现如果n不是质数,则结果为零,如果n为质数则结果为n-1,存在两个特例,1和4,然后就可做出来了

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 using namespace std;
 4 
 5 typedef long long LL;
 6 
 7 bool is_prime(int x) {
 8     for (int i = 2; i*i <= x; i++) {
 9         if (x%i == 0) return false;
10     }
11     return true;
12 }
13 
14 int main() {
15     int tc;
16     scanf("%d", &tc);
17     while (tc--) {
18         int x;
19         scanf("%d", &x);
20         if (x == 1) {
21             printf("1
");
22             continue;
23         }
24         if (x == 4) {
25             printf("2
");
26             continue;
27         }
28         if (is_prime(x)) printf("%d
", x - 1);
29         else printf("%d
", 0);
30     }
31     return 0;
32 }
View Code
原文地址:https://www.cnblogs.com/fenice/p/5295367.html