容易看出是用质因数凑n

首先01个因数的情况可以特判,2个的情况就是ap1+bp2=n,b=n/p2(mod p1),这里的b是最小的特解,求出来看bp2<=n则有解,否则无解

然后剩下的情况最小的质因数p1一定<=1e5,考虑在%p1的意义下做,考虑转成图论,点分别是%p1=x,然后对每个x连边(x+pi)%p1,边权为pi,跑最短路

如果dis[n%p1]<=n就合法,因为这表示可以用和小于n的若干数凑出和n在p1下同余的数,剩下部分用p1填即可

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<queue>
using namespace std;
const int N=200005,M=31600000;
int t,p[M],tot,con;
long long dis[N],a[N];
bool v[M],ans[N],vis[N];
queue<int>q;
struct qwe
{
long long n,k,id;
}b[10005];
bool cmp(const qwe &a,const qwe &b)
{
return a.k<b.k;
}
long long read()
{
long long r=0,f=1;
char p=getchar();
while(p>'9'||p<'0')
{
if(p=='-')
f=-1;
p=getchar();
}
while(p>='0'&&p<='9')
{
r=r*10+p-48;
p=getchar();
}
return r*f;
}
long long ksm(long long a,long long b,long long mod)
{
long long r=1;
while(b)
{
if(b&1)
r=r*a%mod;
a=a*a%mod;
b>>=1;
}
return r;
}
int main()
{
t=read();
for(int i=1;i<=t;i++)
b[i].n=read(),b[i].k=read(),b[i].id=i;
v[1]=1;
for(int i=2;i<M;i++)
{
if(!v[i])
p[++tot]=i;
for(int j=1;j<=tot&&1ll*i*p[j]<M;j++)
{
v[i*p[j]]=1;
if(i%p[j]==0)
break;
}
}
sort(b+1,b+1+t,cmp);
for(int w=1;w<=t;w++)
{
long long n=b[w].n,k=b[w].k;
if(w==1||b[w].k!=b[w-1].k)
{
long long x=k;
con=0;
for(int i=1;i<=tot&&x>1;i++)
{
if(1ll*p[i]*p[i]>x)
{
a[++con]=x;
break;
}
if(x%p[i]==0)
{
a[++con]=p[i];
while(x%p[i]==0)
x/=p[i];
}
}
}
// for(int i=1;i<=con;i++)
// cerr<<a[i]<<" ";cerr<<endl;
if(con==0)
ans[b[w].id]=0;
else if(con==1)
ans[b[w].id]=(n%a[1]==0);
else if(con==2)
ans[b[w].id]=(1ll*n%a[1]*ksm(a[2],a[1]-2,a[1])%a[1]*a[2]<=n);
else
{
if(w==1||b[w].k!=b[w-1].k)
{
for(int i=1;i<=a[1];i++)
dis[i]=1e18;
dis[0]=0;
vis[0]=1;
q.push(0);
while(!q.empty())
{
int u=q.front();//cerr<<u<<endl;
q.pop();
for(int i=2;i<=con;i++)
{
int v=(u+a[i])%a[1];
if(dis[v]>dis[u]+a[i])
{
dis[v]=dis[u]+a[i];//cerr<<v<<endl;
if(!vis[v])
{
vis[v]=1;
q.push(v);
}
}
}
vis[u]=0;
}
}//cerr<<dis[n%a[1]]<<endl;
ans[b[w].id]=dis[n%a[1]]<=n;
}
}
for(int i=1;i<=t;i++)
puts(ans[i]?"YES":"NO");
return 0;
}

codeforces986F Oppa Funcan Style Remastered【线性筛+最短路】的更多相关文章

  1. CF986F Oppa Funcan Style Remastered

    CF986F Oppa Funcan Style Remastered 不错的图论转化题! 题目首先转化成:能否用若干个k的非1因数的和=n 其次,因数太多,由于只是可行性,不妨直接都用质因子来填充! ...

  2. 「CF986F」 Oppa Funcan Style Remastered

    「CF986F」 Oppa Funcan Style Remastered Link 首先发现分解成若干个 \(k\) 的因数很蠢,事实上每个因数都是由某个质因子的若干倍组成的,所以可以将问题转换为分 ...

  3. [CF986F]Oppa Funcan Style Remastered[exgcd+同余最短路]

    题意 给你 \(n\) 和 \(k\) ,问能否用 \(k\) 的所有 \(>1\) 的因子凑出 \(n\) .多组数据,但保证不同的 \(k\) 不超过 50 个. \(n\leq 10^{1 ...

  4. [Codeforces 485F] Oppa Funcan Style Remastered

    [题目链接] https://codeforces.com/contest/986/problem/F [算法] 不难发现 , 每个人都在且仅在一个简单环中 , 设这些环长的长度分别为 A1, A2 ...

  5. Codeforces 986F - Oppa Funcan Style Remastered(同余最短路)

    Codeforces 题面传送门 & 洛谷题面传送门 感谢此题教会我一个东西叫做同余最短路(大雾 首先这个不同 \(k\) 的个数 \(\le 50\) 这个条件显然是让我们对每个 \(k\) ...

  6. [Luogu]A%BProblem——线性筛素数与前缀和

    题目描述 题目背景 题目名称是吸引你点进来的[你怎么知道的] 实际上该题还是很水的[有种不祥的预感..] 题目描述 区间质数个数 输入输出格式 输入格式: 一行两个整数 询问次数n,范围m接下来n行, ...

  7. bzoj2693--莫比乌斯反演+积性函数线性筛

    推导: 设d=gcd(i,j) 利用莫比乌斯函数的性质 令sum(x,y)=(x*(x+1)/2)*(y*(y+1)/2) 令T=d*t 设f(T)= T可以分块.又由于μ是积性函数,积性函数的约束和 ...

  8. BZOJ 2693: jzptab [莫比乌斯反演 线性筛]

    2693: jzptab Time Limit: 10 Sec  Memory Limit: 512 MBSubmit: 1194  Solved: 455[Submit][Status][Discu ...

  9. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

随机推荐

  1. 使用 Nginx 提升网站访问速度(转)

    Nginx 简介 Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器. Nginx 是由 Ig ...

  2. Java for LeetCode 121 Best Time to Buy and Sell Stock

    Say you have an array for which the ith element is the price of a given stock on day i. If you were ...

  3. turbolink 造成 link_to异常

    link_to  点击之后不刷新不加载文件 send_file 只能在浏览器中打开,而不能下载 解决方法:注释gem turbolink,application.js 中移除turbolink

  4. HDU - 1495 非常可乐 【BFS】

    题目链接 http://acm.hdu.edu.cn/showproblem.php?pid=1495 思路 首先 如果可乐的体积 是奇数 那么是无解的 然后 如果能够得到两杯 都是一般容量的可乐 那 ...

  5. Linux (ubuntu和redhat) 常用命令及细节

    1.关闭防火墙(Ubuntu) sudo ufw disable 2.vi 拷贝   参考http://blog.sina.com.cn/s/blog_601331150100ecfr.html 一) ...

  6. centos7 永久修改主机名

    hostnamectl set-hostname xxx 一劳永逸,永绝后患

  7. zabbix 上 mysql 优化

    摘自: https://segmentfault.com/a/1190000001638101

  8. VLAN(虚拟局域网)划分

    VLAN根据不同的需求,可以有多种划分方式: 一:静态划分 基于端口             按VLAN交换机上的物理端口和内部的PVC(永久虚电路)端口来划分 静态划分安全.可靠,易于配置与维护 二 ...

  9. java编程实例

    脚本代码: 1. [代码] package com.gufengxiachen.sthreadchatapp;/** * @author GUXIA */import java.io.Buffered ...

  10. 四维偏序 CDQ套CDQ

    对CDQ深一步的理解 昨天做了一道CDQ,看了一堆CDQ可做的题,今天又做了一道四维偏序 感觉对CDQ的理解又深了一点,故来写一写现在自己对于CDQ的理解 CDQ其实就是实现了这样的一个问题的转化: ...