[TK] Terrible Prime
题目链接 T415418
这道题严格的时间限制比较令人头疼,似乎需要一些高级的算法,但实际上是,想要用点基础知识通过这道题需要两种算法:费马小定理 (见下函数Miller_rabin) 用于subtask1,另一种算法 (见下函数prim) 用于subtask2.两个subtask的范围限制给了我们这样一个机会.
关于费马小定理,参见 Oi-wiki .
string s[2]={"No","Yes"};
typedef long long ll;
ll m;
#define fo(x,y,z) for(int (x)=(y);(x)<=(z);(x)++)
#define fu(x,y,z) for(int (x)=(y);(x)>=(z);(x)--)
typedef pair<int,int> pii;
const int zhenli=0;
const int maxx=0x7f7f;
const int N=3000005;
int n;
ll a[N],ma=-1,b[N];
inline ll quick_mul(ll a,ll b,ll m) //快速乘
{
ll ans = 0;
a %= m;
b %= m;
while (b) {
if (b & 1) {
ans = (ans + a) % m;
}
a = (a + a) % m;
b >>= 1;
}
return ans;
}
ll quick_pow(ll a,ll b,ll m) //快速幂
{
ll res=1;
a%=m;
while(b)
{
if(b&1) res=quick_mul(res,a,m);
a=quick_mul(a,a,m);
b>>=1;
}
return res;
}
bool Miller_rabin(ll n,ll num)
{
if(n==2||n==3) return true;
if(n%2==0||n==1) return false;
srand((unsigned)time(NULL)); //为接下来a的随机取值用
ll d=n-1;
int s=0;
while(!(d&1)) s++,d>>=1;//若d的二进制的最后一位不是1,则说明d还是偶数
for(int i=0;i<num;i++)
{
ll a=rand()%(n-2)+2;//2~n-1;
ll x=quick_pow(a,d,n), y=0;
for(int j=0;j<s;j++)//一共平方s次
{
y=quick_mul(x,x,n);//先平方
if(y==1&&x!=1&&x!=(n-1)) return false;//验证二次探测原理
x=y;
}
if(y!=1) return false;//不满足费马小定理,那就肯定不是质数
}
return true;
}
bool prim(ll num)
{
if(num==1)return 0;
if(num==2||num==3)return 1;
if(num%6!=1&&num%6!=5)return 0;
long long tmp=sqrt(num);
for(long long i=6;i<=tmp+1;i+=6){
if(num%(i-1)==0||num%(i+1)==0)return 0;
}
return 1;
}
int main(){
ll n;
cin>>n;
if(n<=900){
fo(i,1,n)
{
scanf("%lld",&a[i]);
ma=max(ma,a[i]);
b[i]=10;
}
fo(i,1,n)
{
if(Miller_rabin(a[i],b[i]))cout<<"Yes";
else cout<<"No";
if(i!=n)cout<<endl;
}
return 0;
}
for(int i=1;i<=n;i++){
scanf("%lld",&m);
cout<<s[prim(m)]<<endl;
}
return 0;
}
[TK] Terrible Prime的更多相关文章
- HZOJ 20190722 visit (组合数学+数论)
考试T2,考试时打了个$O(n^3)$dp暴力,思路还是很好想的,但细节也不少,然后滚动数组没清空,而且题又看错了,只得了10pts,真是血的教训. 题解: 其实看数据范围,给出了模数是否为质数,其实 ...
- Java 素数 prime numbers-LeetCode 204
Description: Count the number of prime numbers less than a non-negative number, n click to show more ...
- import matplolib 时出现"This probably means that tk wasn't installed properly."的解决方法
最近又添了一台新电脑,配置好各个依赖环境后想用matplotlib画个图,结果报出下面的错误 根据报错分析,应该是C:/Python27/tcl/tk8.5/tk.tcl这个文件出问题了,根据图中的信 ...
- Prime Generator
Peter wants to generate some prime numbers for his cryptosystem. Help him! Your task is to generate ...
- POJ 2739. Sum of Consecutive Prime Numbers
Sum of Consecutive Prime Numbers Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 20050 ...
- UVa 524 Prime Ring Problem(回溯法)
传送门 Description A ring is composed of n (even number) circles as shown in diagram. Put natural numbe ...
- Sicily 1444: Prime Path(BFS)
题意为给出两个四位素数A.B,每次只能对A的某一位数字进行修改,使它成为另一个四位的素数,问最少经过多少操作,能使A变到B.可以直接进行BFS搜索 #include<bits/stdc++.h& ...
- hdu 5901 count prime & code vs 3223 素数密度
hdu5901题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5901 code vs 3223题目链接:http://codevs.cn/problem ...
- 最小生成树 prime zoj1586
题意:在n个星球,每2个星球之间的联通需要依靠一个网络适配器,每个星球喜欢的网络适配器的价钱不同,先给你一个n,然后n个数,代表第i个星球喜爱的网络适配器的价钱,然后给出一个矩阵M[i][j]代表第i ...
- 最小生成树 prime poj1258
题意:给你一个矩阵M[i][j]表示i到j的距离 求最小生成树 思路:裸最小生成树 prime就可以了 最小生成树专题 AC代码: #include "iostream" #inc ...
随机推荐
- LLM并行训练6-激活优化
前置知识 Activation 激活指的是一些在fp时计算得到的临时tensor, 会用于bp时的计算. 如果能在fp计算后把临时tensor缓存下来就可以加速bp, 缺点在于某些激活会占用大量显存. ...
- 图解翻转单向链表,超详细(python语言实现)
节点类: 1 class ListNode(object): 2 def __init__(self, x): 3 self.val = x 4 slef.next = None 反转单向链表的函数如 ...
- RDD入门了解
RDD即resilient distributed dataset 弹性分布式数据集,简单来说就是数据集,可以类比python的list dict:但是数据是分布式存储的,可用于分布式计算:可以存在内 ...
- JAVA并发编程理论基础
注:本文章是对极客时间<java并发编程实战>学习归纳总结,更多知识点可到原文 java并发编程实战 进行学习.如果侵权,联系删除: 一.并发编程的BUG的源头 1.1 缓存导致的可见性问 ...
- python global变量作用域
python变量作用域 var1 = 123 def func(): var1 = 456 print(var1) func() #456 print(var1) #123 ============= ...
- 《Python数据可视化之matplotlib实践》 源码 第四篇 扩展 第十一章
图 11.2 import matplotlib.pyplot as plt import matplotlib as mpl import numpy as np plt.axes([0.1, ...
- 【转载】 深入理解TensorFlow中的tf.metrics算子
原文地址: https://mp.weixin.qq.com/s/8I5Nvw4t2jT1NR9vIYT5XA ============================================ ...
- 强化学习、分布式计算方向的phd毕业后去企业的要求
实验室慕师弟马上要phd毕业了,虽然我是遥遥无期,但是看到身边同学可以上岸还是提师弟高兴.由于师弟准备去企业工作,于是乎我也不免好奇起来phd毕业后去公司会有什么样的要求,于是网上找了找招聘信息,挑了 ...
- 如何在WSL2中安装可执行编译.cu文件的cuda环境
参考nvidia官方文档: https://docs.nvidia.com/cuda/wsl-user-guide/index.html#installing-insider-preview-buil ...
- windows系统下最新版gym[atari]中的游戏环境(此时最新版的gym为0.24.0,gym==0.24.0)
关于gym[atari]的安装参看以前的博文: windows系统下安装最新版gym的安装方法(此时最新版的gym为0.24.0,gym==0.24.0) 上代码: import time impor ...