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

题意:给一个比较大的质数P(1e14以内),求比它小的最大的质数Q(貌似保证存在的样子,反正我没判不存在),求Q!modP的值。

一开始觉得是个什么神仙题,但是怎么全场都绿了一片,瞬时感觉智商受到了侮辱。想了很多什么奇奇怪怪的性质,都不太清楚,然后队友卡1007的时候我打了个对P找ans的表看了一下。发现当P-Q=2的时候就是ans=1???

然后打个(P-2)!%P的表,发现小数据都这样过,估计也是真的这样子。

那么考虑怎么找这个Q,首先肯定特判掉P=3,然后Q必然是奇数。

考虑暴力找Q的复杂度:首先根据质数定理(或者直接打1e7表出来知道)得到质数的数量大概6e5这样子,验证Q是质数一圈暴力。

假如Q不是质数,极端情况,是两个不同质数的积,那么这样的数的分布应该是很大的。

根据下面的代码可以打出这样的极端合数:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll; const int MAXN = 1e7; int pri[MAXN + 5], pritop;
bool notpri[MAXN + 5];
//pritop从1开始计数 void sieve(int n) {
notpri[1] = 1;
for(int i = 2; i <= n; i++) {
if(!notpri[i])
pri[++pritop] = i;
for(int j = 1; j <= pritop && i * pri[j] <= n; j++) {
notpri[i * pri[j]] = 1;
if(i % pri[j] == 0)
break;
}
}
printf("ptop=%d\n", pritop);
} vector<ll> H; int main() {
#ifdef Yinku
freopen("Yinku.in", "r", stdin);
#endif // Yinku
sieve(MAXN);
for(int i = pritop; i >= pritop - 100; --i) {
for(int j = i - 1; j >= i - 1 - 100; --j) {
H.push_back(1ll*pri[i]*pri[j]);
}
}
sort(H.begin(),H.end(),greater<ll>());
for(int i=0;i<100;++i){
printf("i=%d num=%lld\n",i+1,H[i]);
}
return 0;
}

可以看到这样的极端合数之间的间隔非常大!两个之间差了1e6以上!

ptop=664579
i=1 num=99999640000243
i=2 num=99999620000261
i=3 num=99999440000783
i=4 num=99999340000513
i=5 num=99999280000567
i=6 num=99999220000621
i=7 num=99999200000639
i=8 num=99999160001539
i=9 num=99999140001653
i=10 num=99999100001701
i=11 num=99999080001827
i=12 num=99999040001863
i=13 num=99999020002001
i=14 num=99999020001917
i=15 num=99999000002059
i=16 num=99998980000837
i=17 num=99998920000891
i=18 num=99998800003591
i=19 num=99998800002511
i=20 num=99998800000999

假如把三个不同质数的乘积也放上来,基本也是没有缩小到哪里。

所以可以猜测,在一次暴力验证的过程中,在找到Q之前,遇到的极端合数的数量估计不会超过10个,甚至不会超过5个。其他的合数的素因子很容易被判断掉了,几乎只是暴力判Q的零头,忽略不计。

质数之间的间隔的话,根据质数的总数量,平均是32个出现一个,当然在比较大的时候间隔较远,但是我猜测不会超过1000,连续1000个数都没有质数的,希望大佬给出一个估计?

那么大概暴力判一次Q,最差情况在6e6左右,考虑T比较小(后面题面改来改去差评),直接暴力。

根据猜测的结果(威尔逊定理):(P-2)! = 1 mod P ,每次两边乘两个个逆元也可以转移到下一个数,至多转移1000次,1000log1e14也是零头,忽略不计。

最后要小心溢出,改了很多地方,乘逆元的地方都改了__int128但是快速幂里面没改,导致溢出WA1,太坑了。

其实只是使用乘法取模,可以用快速乘的。

2019 Multi-University Training Contest 3 - 1006 - Fansblog - 打表 - 暴力的更多相关文章

  1. 2019 Multi-University Training Contest 3 T6 - Fansblog

    Fansblog Time Limit: 2000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total Submi ...

  2. 2019 Multi-University Training Contest 8 - 1006 - Acesrc and Travel - 树形dp

    http://acm.hdu.edu.cn/showproblem.php?pid=6662 仿照 CC B - TREE 那道题的思路写的,差不多.也是要走路径. 像这两种必须走到叶子的路径感觉是必 ...

  3. 2019 Multi-University Training Contest 7 - 1006 - Snowy Smile - 线段树

    http://acm.hdu.edu.cn/showproblem.php?pid=6638 偷学一波潘哥的二维离散化和线段树维护最大子段和. 思路是枚举上下边界,但是不需要从左到右用最大子段和dp. ...

  4. 2015 Multi-University Training Contest 2 1006 Friends

    Friends Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5305 Mean: n个人,m对朋友关系,每个人的朋友中又分为在线 ...

  5. 2015 Multi-University Training Contest 3 1006 Beautiful Set

    Beautiful Set Problem's Link: http://acm.hdu.edu.cn/showproblem.php?pid=5321 Mean: 给出一个集合,有两种计算集合的值的 ...

  6. HDU 6324.Problem F. Grab The Tree-博弈(思维) (2018 Multi-University Training Contest 3 1006)

    6324.Problem F. Grab The Tree 题目看着好难,但是题解说的很简单,写出来也很简单.能想出来就是简单的,想不出来就难(讲道理,就算是1+1的题目,看不出来就是难的啊). 和后 ...

  7. 2015 Multi-University Training Contest 2 1006 Friends 壮压

    题目链接 题意:t 组測试数据,每组測试数据有 n个人,m条关系 每条关系能够是 "线上关系" 或者 "线下关系". 要求每一个人的线上关系(条数) == 线下 ...

  8. 2019 Nowcoder Multi-University Training Contest 4 E Explorer

    线段树分治. 把size看成时间,相当于时间 $l$ 加入这条边,时间 $r+1$ 删除这条边. 注意把左右端点的关系. #include <bits/stdc++.h> ; int X[ ...

  9. 2019 Nowcoder Multi-University Training Contest 1 H-XOR

    由于每个元素贡献是线性的,那么等价于求每个元素出现在多少个异或和为$0$的子集内.因为是任意元素可以去异或,那么自然想到线性基.先对整个集合A求一遍线性基,设为$R$,假设$R$中元素个数为$r$,那 ...

随机推荐

  1. vue组件样式scoped

    1.vue组件中的样式如果没加scrped,样式代表的是全局样式(避免组件之间样式的冲突).加了属性代表是模块化的. 其他组件引用button组件 上面分析了单个组件渲染后的结果,那么组件互相调用之后 ...

  2. Python---进阶---logging---logger

    一.####用logging的四大组件来实现日志的功能 - 打印出函数执行的时间,日志的等级,日志的消息 - 用装饰器 - 不同的日志,要记录不同等级的日志消息 ------------------- ...

  3. day03记 angular代码

    一.AngularJs AngularJS 是一个 JavaScript 框架.通过 指令 扩展了 HTML,且通过 表达式 绑定数据到 HTML. 1.四大特征 MVC模式.模块化.自动化双向数据绑 ...

  4. zabbix监控A主机到B主机的网络质量

    采用zabbix自带的icmp ping即可进行监控: 1.安装fping 2.将fping安装后链接到/usr/sbin/fping下,设置组为zabbix; 3.增加监控项:icmpping[ip ...

  5. mobx状态管理快速入门

    1.mobx状态管理   安装: creact-react-app mobx  

  6. Activiti组任务(十)

    1 Candidate-users 候选人 1.1需求 在流程定义中在任务结点的 assignee 固定设置任务负责人,在流程定义时将参与者固定设置在.bpmn 文件中,如果临时任务负责人变更则需要修 ...

  7. CityMaker SDK与三维GIS城市

    https://wenku.baidu.com/view/abc2a32f01f69e3142329426.html https://blog.csdn.net/weixin_38476447/art ...

  8. SVM 笔记整理

    支持向量机 一.支持向量机综述 1.研究思路,从最特殊.最简单的情况开始研究 基本的线性的可分 SVM 解决二分类问题,是参数化的模型.定义类标记为 \(+1\) 和 \(-1\)(区别于感知机,感知 ...

  9. 大数据笔记(二十)——NoSQL数据库之MemCached

    一.为什么要把数据存入内存? 1.原因:快2.常见的内存数据库 (*)MemCached:看成Redis的前身,严格来说Memcached的不能叫数据库,原因:不支持持久化 (*)Redis:内存数据 ...

  10. 大数据架构师必读的NoSQL建模技术

    大数据架构师必读的NoSQL建模技术 从数据建模的角度对NoSQL家族系统做了比较简单的比较,并简要介绍几种常见建模技术. 1.前言 为了适应大数据应用场景的要求,Hadoop以及NoSQL等与传统企 ...