[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 ...
随机推荐
- python 列表append和 的区别??
python列表中的合并 python列表中append方法是给列表增加一个元素,而'+='是增加上该符号后边的元素,类似于extend方法 不知道对错,先记下来.我学的append方法是在列表最后追 ...
- 题解:P10537 [APIO2024] 九月
题解:P10537 [APIO2024] 九月 题意 在一个树上,在 \(k\) 天内有 \(n-1\) 个节点掉落,会有 \(m\) 个记录者记录掉落的情况,每一天每一个人会以任意的顺序记录当天的掉 ...
- C# 网络编程:.NET 开发者的核心技能
前言 数字化时代,网络编程已成为软件开发中不可或缺的一环,尤其对于 .NET 开发者而言,掌握 C# 中的网络编程技巧是迈向更高层次的必经之路.无论是构建高性能的 Web 应用,还是实现复杂的分布式系 ...
- 胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐
智胜未来:国内大模型+Agent应用案例精选,以及主流Agent框架开源项目推荐 Agent是以大模型为核心的智能体,通过与用户对话的形式,来完成各种任务,它很像一个"人".如果和 ...
- 什么是spring.factories,引入未知模块报错如何解决
对于maven中引入其他外部包加入容器的过程,需要用到spring.factories spring.factories的作用:将自动配置类与对应的配置类集中在一起,方便springboot自动装配, ...
- 【AJAX】Asynchronous JavaScript And XML (非同步的JS & XML)
什么是AJAX? 按照使用的感觉来看 说到底就是一个可以不刷新网页就能发送POST & GET请求的技术 AJAX 即"Asynchronous Javascript And XML ...
- 编程语言mojo报错:error: cannot call function that may raise in a context that cannot raise
代码: from python import Python fn main(): # fn main() raises: # This is equivalent to Python's `impor ...
- 如果一个windows主机上插两个蓝牙适配器会如何???——由于 Windows 无法加载这个设备所需的驱动程序,导致这个设备工作异常。 (代码 31)——windows主机蓝牙适配器驱动错误排查
事情是这样的,在某鱼上挂了一个蓝牙适配器,是自己多年前买的,给自己的老电脑用的,那一台老电脑主板上没有自带蓝牙,于是就在某东上买了一个蓝牙适配器: 但是这几年新买的电脑都自带蓝牙,于是准备把这个适配器 ...
- 深度学习用什么卡比较给力?—— A100/H100真的么有RTX4090好吗?
近日看到这么一个帖子: https://www.zhihu.com/question/612568623/answer/3131709693 ============================= ...
- idea中多线程debug实现方案
1.背景 2.步骤 步骤一: 步骤二: 步骤三: 启动测试,查看个线程状态 完美