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很神奇,它会每天变大。在第一天的时候,它会变大1倍。在第二天的时候,它会变大2倍。在第n天的时候,它会变大n倍。 zball原来的体积是1。Tina想知道,zball在第n−1天时的体积对n取模是多大呢? Tina是一个蠢蠢的女孩子,当然不会算啦,所以她请你帮她算出这个答案呢。
输入描述
第一行一个正整数T,表示数据组数 接下来T行,每行一个正整数n,意义如题面所述 T≤105,2≤n≤109
输出描述
对于每组数据,输出一个正整数,表示答案。
输入样例
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\n"); 22 continue; 23 } 24 if (x == 4) { 25 printf("2\n"); 26 continue; 27 } 28 if (is_prime(x)) printf("%d\n", x - 1); 29 else printf("%d\n", 0); 30 } 31 return 0; 32 }