关于ABC D
  • 板块学术版
  • 楼主NightStriker
  • 当前回复8
  • 已保存回复8
  • 发布时间2023/1/7 21:49
  • 上次更新2023/10/24 05:14:09
查看原帖
关于ABC D
714084
NightStriker楼主2023/1/7 21:49

赛时写了个线性筛还写了个二分平方根 WA*10 AC*6 没调出来 /dk

如果是平方根写错了我就真寄了。

#include<bits/stdc++.h>
#define int long long
using namespace std;
int t,n;
int pri[1000001],now;
bool vis[1000001],prime[1000001];
int pfg(int n) {//平方根
	int l = 1,r = sqrt(n)+10;
	while(l<=r) {
		int mid = (l+r)/2;
		if(mid*mid==n) {
			return mid;
		} else if(mid*mid<n) {
			l = mid+1;
		} else r = mid-1;
	}
	return -1;
}
signed main() {
	for(int i = 2; i<=1e6; i++) {//线性筛预处理
		if(!vis[i])prime[i] = 1,pri[++now] = i;
		for(int j=1; j<=now&&pri[j]*i<=1e6; j++) {
			vis[pri[j]*i] = 1;
			if(i%pri[j]==0) break;
		}
	}
	cin>>t;
	while(t--) {
		cin>>n;
		for(int q = 1; q<=1e6; q++) {//枚举q
			int p;
			if(!prime[q]) continue;/不是质数直接退出
			if(n%q==0) p = n/q;
			else continue;
			int ans = pfg(p);
			if(ans==-1) continue; 
			if(ans*ans*q==n) {//判断
				cout<<ans<<' '<<q<<endl;
				break;
			}
		}
	}
	return 0;
}
2023/1/7 21:49
加载中...