HDOJ 5391 Zball in Tina Town
来源:互联网 发布:2017理财软件排行 编辑:程序博客网 时间:2024/04/30 10:30
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5391
题意:给你一个n,问你(n-1)! % n的值。
此题用到的是一个威尔逊定理,威尔逊定理的内容是说如果n是素数,那么一定存在(n-1)! % n == -1,其实如果比较机智知道打表的同学应该也能看出这个规律,那么小编这里证明一下这个威尔逊定理,首先在这个MOD n的乘法中,一共有n-1个元素,如果n为素数,那么每一个元素一定存在一个逆元,那思考,如果每元素都有逆元那么两两配对结果不应该是1吗……当然还得考虑没有办法两两配对的,那就是逆元就是其本身的,x^2 MOD n = 1, 解得x = 1或者x = n-1,那么我们在阶层中除了这两个特殊的刚刚好可以两两配对,又因为(n-1)%n == n-1,所以结果就是n-1。
那么素数就解决了,我们再看非素数,仔细想,如果存在一个因子x,那么x * (n/x) == n,所以如果是一个非素数,那么一定存在两个因子,使得其积为n,那么整个阶层就一定是n的倍数了,所以答案就为0了。但是真的每一个非素数都是这样的吗?当然我们还得考虑特殊情况,那就是只存在一个因子x,且x^2 == n,这种明显就不能构成n的倍数,解出来这个值为4。
所以这道题我们只需要判断是否是素数,如果是非素数再特判一下4就好了。
#include <cstdio>#include <cstring>#include <iostream>#include <algorithm>using namespace std;#define LL __int64int prime(int n){for(int i=2; i*i<=n; i++)if(n % i == 0)return 0;return 1;}int main(){int T;scanf("%d",&T);while(T--){int n;scanf("%d",&n);if(n == 4) printf("2\n");else if(!prime(n)) printf("0\n");else printf("%d\n",n-1);}}
0 0
- HDOJ 5391 Zball in Tina Town
- HDOJ-5391 Zball in Tina Town(数学)
- 【威尔逊定理】HDOJ Zball in Tina Town 5391
- Zball in Tina Town
- Zball in Tina Town
- hdu 5391 Zball in Tina Town
- hdu 5391 Zball in Tina Town (数学)
- hdu 5391 Zball in Tina Town
- hdu 5391 Zball in Tina Town
- HDU-5391 Zball in Tina Town
- HDU 5391-Zball in Tina Town(数论)
- HDU 5391 Zball in Tina Town
- HDU-5391-Zball in Tina Town
- hdu-5391-Zball in Tina Town
- HDU5391-Zball in Tina Town
- hdu5391 Zball in Tina Town
- Zball in Tina Town HDU
- hdu 5391 Zball in Tina Town 解题报告
- Android性能优化之数据库优化
- Android AccessibilityDelegate的使用
- iptables防火墙原理
- 剑指Offer:反转链表
- Android Universal Image Loader 源码分析
- HDOJ 5391 Zball in Tina Town
- Android4.4 home键禁用
- hdoj-1273-漫步森林
- Gridview控件整体的高度设置
- 通过考试申报中级职称办理上海居住证积分加分和居转户
- 关键字static/const的作用
- EventBus 源码解析
- asmck 断线重连 以及解决不能够接收到消息的问题
- DDR技术基础