HDU2973(威尔逊定理)
YAPTCHA
Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 875 Accepted Submission(s): 458
on their webpages. In short, to get access to their scientific papers, one have to prove yourself eligible and worthy, i.e. solve a mathematic riddle.
However, the test turned out difficult for some math PhD students and even for some professors. Therefore, the math department wants to write a helper program which solves this task (it is not irrational, as they are going to make money on selling the program).
The task that is presented to anyone visiting the start page of the math department is as follows: given a natural n, compute
where [x] denotes the largest integer not greater than x.
13
1
2
3
4
5
6
7
8
9
10
100
1000
10000
0
1
1
2
2
2
2
3
3
4
28
207
1609
Central European Programming Contest 2008
威尔逊定理:当( p -1 )! ≡ -1 ( mod p ) 时,p为素数。
证明如下
充分性:
当p不是素数,那么令p=a*b ,其中1 < a < p-1 ,1 < b < p-1.
(1)若a≠b,
因为(p-1)!=1*2*...*a*...*b*...*p-1,
所以(p-1)!≡ 0 (mod a)
(p-1)!≡ 0 (mod b)
可得(p-1)!≡ 0 (mod a*b) ,
即 (p-1)!≡ 0 (mod p)
与( p -1 )! ≡ -1 ( mod p ) 矛盾
(2)若a=b
因为(p-1)!=1*2*...*a*...*2a*...*p-1.
所以(p-1)!≡ 0 (mod a)
(p-1)!≡ 0 (mod 2a)
可得(p-1)!≡ 0 (mod a*2a) => (p-1)!≡ 0 (mod a*a) ,
即 (p-1)!≡ 0 (mod p)
与( p -1 )! ≡ -1 ( mod p ) 矛盾
因此p只能是素数。
必要性:
当p为2,( p -1 )! ≡ -1 ( mod p ) 显然成立
当p为3,( p -1 )! ≡ -1 ( mod p ) 显然成立
对于p>=5,令M={2,3,4,...,p-2}.
对于a∈M,令N={a,2*a,3*a,4*a,....(p-2)*a,(p-1)*a}
令1 <= t1 <= p-1 ,1 <= t2 <= p-1,t1 ≠ t2
那么t1*a∈N,t2*a∈N。
若t1*a≡t2*a (mod p) ,那么|t1-t2|*a ≡ 0 (mod p)。
因为|t1-t2|*a∈N,与N中元素不能被p除尽矛盾。
所以t1*a≡t2*a不成立。
那么N中元素对p取模后形成的集合为{1,2,3,4,...,p-1}.
设x*a ≡ 1 (mod p)。
当x=1时, x*a=a, 对p取模不为1,所以不成立。
当x=p-1时,(p-1)*a=p*a-a, 对p取模不为1,所以不成立。
当x=a时,a*a≡1 (mod p),可得(a+1)*(a-1)≡ 0 (mod p),a=1或a=p-1 ,所以不成立。
综上所述,x,a∈M,并且当a不同时,x也随之不同。
所以,M集合中每一个元素a都能够找到一个与之配对的x,使得x*a ≡ 1 (mod p).
(p-1)!=1*2*3*...p-1
=1*(2*x1)*(3*x3)*...*(p-1)
所以, (p-1)!≡1*(p-1) (mod p)
即,(p-1)!≡-1 (mod p)
证明完毕
#include <bits/stdc++.h>
using namespace std; #define mem(a) memset(a, 0, sizeof(a))
const int maxn = 1e6+100;
int ans[maxn*3+100]; int isprime(int n) {
if (n == 1) return 0;
if (n == 2) return 1;
for (int i = 2; i*i<=n; i++) {
if (n%i == 0) return 0;
}
return 1;
} void init() {
mem(ans);
for (int i = 1; i<maxn; i++) {
if (isprime(i*3+7)) ans[i] = ans[i-1]+1;
else ans[i] = ans[i-1];
}
} int main() {
init();
int t;
scanf("%d", &t);
while (t --) {
int n;
scanf("%d", &n);
printf("%d\n",ans[n]);
} return 0;
}
HDU2973(威尔逊定理)的更多相关文章
- hdu2973-YAPTCHA-(欧拉筛+威尔逊定理+前缀和)
YAPTCHA Time Limit: 10000/5000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Su ...
- 威尔逊定理--HDU2973
参考博客 HDU-2973 题目 Problem Description The math department has been having problems lately. Due to imm ...
- hdu2973 YAPTCHA【威尔逊定理】
<题目链接> 题目大意: The task that is presented to anyone visiting the start page of the math departme ...
- hdu5391 Zball in Tina Town(威尔逊定理)
转载请注明出处: http://www.cnblogs.com/fraud/ ——by fraud Zball in Tina Town Time Limit: 3000/1500 ...
- hdu 2973"YAPTCHA"(威尔逊定理)
传送门 题意: 给出自然数 n,计算出 Sn 的值,其中 [ x ]表示不大于 x 的最大整数. 题解: 根据威尔逊定理,如果 p 为素数,那么 (p-1)! ≡ -1(mod p),即 (p-1)! ...
- HDU 5391 Zball in Tina Town【威尔逊定理】
<题目链接> Zball in Tina Town Problem Description Tina Town is a friendly place. People there care ...
- YAPTCHA UVALive - 4382(换元+威尔逊定理)
题意就是叫你求上述那个公式在不同N下的结果. 思路:很显然的将上述式子换下元另p=3k+7则有 Σ[(p-1)!+1/p-[(p-1)!/p]] 接下来用到一个威尔逊定理,如果p为素数则 ( p -1 ...
- HDU - 2973:YAPTCHA (威尔逊定理)
The math department has been having problems lately. Due to immense amount of unsolicited automated ...
- HDU6608-Fansblog(Miller_Rabbin素数判定,威尔逊定理应用,乘法逆元)
Problem Description Farmer John keeps a website called ‘FansBlog’ .Everyday , there are many people ...
随机推荐
- iOS Swift3.0 OC 数据储存--归档
一.Swift 3.0 1.model class userModel: NSObject,NSCoding { var account: String = "" var regm ...
- Python学习日记day10------函数的命名空间、作用域与闭合函数
1,参数陷阱 如果默认参数的只是一个可变数据类型,那么每一次调用的时候,如果不传值就共用这个数据类型的资源. 2,三元运算 c=a if a>b else b#如果a>b返回a,否则,返回 ...
- Intellj Idea使用tomcat部署不成功,死活也找不到解决办法的看这里
Intellij 周六晚上开发一个简单web项目的,使用tomcat打包部署,死活也没法部署成功,和这个问题怼了6个小时,也没搞清楚具体为什么不能访问页面,但是好在最后还是找了个方法把问题解决了.以下 ...
- Ubuntu14.04下安装 boost (boost_1.54 最简单的方法)
直接执行命令: sudo apt-get install libboost-dev 测试: 创建一个 boost_test.cpp 文件,写入 #include<iostream> #i ...
- MySQL 如何执行关联查询
本文同时发表在https://github.com/zhangyachen/zhangyachen.github.io/issues/51 当前mysql执行的策略很简单:mysql对任何关联都执行嵌 ...
- 查看内存和cpu
top: 主要参数 d:指定更新的间隔,以秒计算. q:没有任何延迟的更新.如果使用者有超级用户,则top命令将会以最高的优先序执行. c:显示进程完整的路径与名称. S:累积模式,会将己完成或消失的 ...
- 从源码(编译)安装golang
从源码安装golang 通常情况下,安装go只需要在官网(https://golang.org/dl/)下载适合系统的二进制发布包,按照安装说明进行安装即可. 对于Linux, Mac OS X和Fr ...
- 利用伪元素:after清除浮动
一.代码 html代码 <div class="clearfix"></div> css样式 .clearfix{ zoom:1;/*这个属性是为了兼容IE ...
- SpringBoot入坑-项目搭建
对于学过三大框架的小童鞋,从今天开始给大家带来一套新的框架学习,相信对于做程序的小童鞋一定有所耳闻,作为下一代java开发框架springboot,减去了繁琐的xml配置,相信用过spring.sta ...
- c# 去除字符串中重复字符
String.Join 和 Distinct 方法 https://www.cnblogs.com/louby/p/6224960.html 1.在写程序中经常操作字符串,需要去重,以前我的用方式利用 ...