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. 【Luogu4299】首都

    BZOJ权限题. 洛谷 题目描述 在X星球上有N个国家,每个国家占据着X星球的一座城市.由于国家之间是敌对关系,所以不同国家的两个城市是不会有公路相连的. X星球上战乱频发,如果A国打败了B国,那么B ...

  2. SpringCloud学习系列-构建部门微服务消费者Module

    1.新建microservicecloud-consumer-dept-80 2.Pom <project xmlns="http://maven.apache.org/POM/4.0 ...

  3. 【leetcode】1146. Snapshot Array

    题目如下: Implement a SnapshotArray that supports the following interface: SnapshotArray(int length) ini ...

  4. element和iView初步研究(-)

    element 1.可以通过npm 和使用cdn 2,支持多种语言组件 3.基本组件还是可以的 iView iView 是一套基于 Vue.js 的开源 UI 组件库,主要服务于 PC 界面的中后台产 ...

  5. 弹性盒子FlexBox简介(二)

    弹性盒子属性 一.align-content属性 属性作用:用于修改flex-wrap属性行为.类似于justify-content,但它不是设置弹性子元素的对齐,而是设置各个行的对齐. 属性值: f ...

  6. JSP实现大文件上传和下载

    javaweb上传文件 上传文件的jsp中的部分 上传文件同样可以使用form表单向后端发请求,也可以使用 ajax向后端发请求 1.通过form表单向后端发送请求 <form id=" ...

  7. Ubuntu redis 实战 持久化策略 主从复制 以及 故障恢复

    推荐文章 redis数据结构学习 redis持久化 redis主从复制 redis哨兵

  8. 一篇面试的考题----jQuery

    一.jQuery测试题 下面哪种不是jquery的选择器?(单选)A.基本选择器 B.后代选择器 C.类选择器 D.进一步选择器考点:jquery的选择器 (C) 当DOM加载完成后要执行的函数,下面 ...

  9. bootstrap-multiselect 设置单选无效(设置单选依然是复选框)

    bootstrap-multiselect 的使用介绍:https://www.cnblogs.com/landeanfen/p/5013452.html bootstrap-multiselect ...

  10. 在阿里云虚拟主机上部署Laravel

    拿laravel5.1来说: 在根目录下创建一个local文件夹,把网站根目录下除了public文件夹以外所有文件及文件夹剪切到local文件夹中 然后把public文件夹下的所有文件剪切到网站根目录 ...