CF1647D Madoka and the Best School in Russia 做题记录

我不会分讨。

可以知道一个美丽数 a 的充要条件是 a=d×kdk
有个朴素的想法是将给你的 x 拆成 dp×k

  • 显然如果 p1 那么我们拆不动。
  • 如果 k 可以拆成大于 2 个数的乘积,那么是可行的。
  • 如果 k 是质数,那么我们就拆 d
    • 如果 d 是质数,就拆不了了。
    • 如果 d 不是质数:
      • 如果有个不是 k 的质因子,那么是可行的。
      • 如果 k=1,那么是不可行的。
      • 现在 d=kq
        • 如果 d=k2p>3,那么可行;
        • 如果 q>2p>2,那么可行。
点击查看代码
#include<bits/stdc++.h>
#define int ll
#define mem(a,b) memset((a),(b),sizeof(a))
#define m0(a) memset((a),0,sizeof(a))
#define lb(x) ((x)&-(x))
#define lc(x) ((x)<<1)
#define rc(x) (((x)<<1)|1)
#define pb(G,x) (G).push_back((x))
#define For(a,b,c) for(int a=(b);a<=(c);a++)
#define Rep(a,b,c) for(int a=(b);a>=(c);a--)
#define in1(a) a=read()
#define in2(a,b) a=read(), b=read()
#define in3(a,b,c) a=read(), b=read(), c=read()
#define inn(i,n,a) For(i,1,n) a[i]=read();

#define ll long long
#define i128 __int128

using namespace std;
inline int read() {
	int xx= 0;int f= 1;
	char c = getchar();
	while(c<'0'||c>'9') { 
		if(c=='-') f= -1;
		c= getchar();
	}
	while(c>='0'&&c<='9') {
		xx= (xx<<1)+(xx<<3)+(c^48);
		c= getchar();
	}
	return xx*f;
}
#define maxn 200050
int x,d;
void work() {
	in2(x,d);
	int cnt=0;
	while(x%d==0) x/=d,cnt++;
	if(cnt<2) return cout<<"NO\n",void();
	for(int i=2;i*i<=x;i++) {
		if(x%i==0) return cout<<"YES\n",void();
	}
	bool pr=1;
	for(int i=2;i*i<=d;i++)
		if(d%i==0) {
			pr=0;
			break;
		}
	if(pr) return cout<<"NO\n",void();
	if(cnt>2) {
		for(int i=2;i*i<=d;i++)
			if(d%i==0&&(i!=x||(d/i!=x))) return cout<<"YES\n",void();
	}
	if(x==1) return cout<<"NO\n",void();
	int	cnt2=0;
	while(d%x==0) cnt2++,d/=x;
	if(cnt2>2&&cnt>2) return cout<<"YES\n",void();
	if(cnt2==2&&cnt>3) return cout<<"YES\n",void();
	return cout<<"NO\n",void();
}
signed main() {
	int _=read();
	while(_--) work();
}

posted @   coding_goat_qwq  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 按钮权限的设计及实现
点击右上角即可分享
微信分享提示