洛谷题解:P8778 [蓝桥杯 2022 省 A] 数的拆分

1|0思路

这道题看似需要枚举 x 的因子,其实 x 在分解后会变成这个样子 p12 * p23 因为 ∀y≥2, , xy 其中 y 一定可以拆分成 2 * a + 3 * b 于是这道题就很好解了,只需要暴力判断 4000 以内的素因子,对于大于 4000 的 p ,指数只可能是 2,3,4 ,即判断一下是否为平方数或者立方数即可。

本题还要注意细节,我算了一下时间复杂度 5.5 * 107 还能跑,只是怕卡常最好加上快读。

点击查看代码
//#pragma GCC optimize(2)
//#pragma GCC optimize(3,“Ofast”,“inline”)
#include <bits/stdc++.h>
#define foR for
#define intt register int
#define zs(x) isdigit(x)
#define ll long long
#define amax max_element
#define genshin() puts("genshi over")
#define debug() puts("I AK IOI")
#define re return
#define rep(i,l,j,k) for(register int i=l;i<=j;i+=k)
#define int long long
using namespace std;
const int N = 1e6 + 10;

int T,n;

int check(int x) {
	int sq = (int)pow(x,1.0/2);
	int qs = (int)pow(x,1.0/3);
	if(sq*sq==x) return 2;
	sq++;if(sq*sq==x) return 2;
	if(qs*qs*qs==x) return 3;
	qs++;
	if(qs*qs*qs==x) return 3;
	qs++;
	if(qs*qs*qs==x) return 3;
	qs++;
	return 0;
}
// 检查平方和立方数 

inline int read() {
	char c = getchar();int x = 0;
	while(!isdigit(c)) c=getchar();
	while(isdigit(c)) x=(x<<1)+(x<<3)+c-'0',c=getchar();
	return x;
}

inline void write(int x) {
	char c = x % 10 - '0';
	putchar(c);
	if(x>9) write(x/10); 
}

int vis[N],prime[N],tot;

void init(int n) {
	for(intt i=2;i<=n;++i) {
		if(vis[i]) continue;
		prime[++tot] = i;
		for(int j=i*2;j<=n;j+=i) vis[j] = 1;
	}
}

signed main() {
	ios::sync_with_stdio(0);
	ios_base::sync_with_stdio(0);
	cin.tie(NULL); cout.tie(NULL);
	T=read();
	init(4000);
	/*先预处理 4000 以内的指数*/
	bool fl = 1;
	while(T--) {
		n = read();
		if(check(n)) {
			puts("yes");
			continue;
			/*考虑和一搭配的情况*/
		}
		fl = 1;
		for(intt i=1;i<=tot;++i) {
			int now = 0;
			while(n%prime[i]==0) n /= prime[i],now++;
			if(now==1) {fl = 0;break;}
		}
		if(fl && check(n)) puts("yes");
		else puts("no");
	}
	return 0;
}


如果您觉得阅读本文对您有帮助,请点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!欢迎各位转载,但是未经作者本人同意,转载文章之后必须在文章页面明显位置给出作者和原文连接,否则保留追究法律责任的权利。

__EOF__

本文作者虽不能至,心向往之
本文链接https://www.cnblogs.com/FChang/p/18117598.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   FChang  阅读(56)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 使用C#创建一个MCP客户端
· ollama系列1:轻松3步本地部署deepseek,普通电脑可用
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 按钮权限的设计及实现
xxx2762天8小时13分59秒
点击右上角即可分享
微信分享提示