AcWing 3491. 完全平方数
原题链接
简单
作者:
ljw666
,
2021-06-04 16:31:39
,
所有人可见
,
阅读 379
C++ 代码
#include <bits/stdc++.h>
using namespace std;
const int N=1e6+2,inf=0x3f3f3f3f;
typedef long long ll;
bool vis[N+10];
ll cnt,prime[N+10];
void get_prime()
{
memset(vis,1,sizeof(vis));
vis[1]=0;
for(ll i=2;i<=N;i++)
{
if(vis[i])prime[++cnt]=i;
for(ll j=1;j<=cnt&&i*prime[j]<=N;j++)
{
vis[i*prime[j]]=0;
if(i%prime[j]==0)break;
}
}
}
ll f(ll x)
{
ll ans=1;
for(ll i=1;i<=cnt&&prime[i]*prime[i]<=x;i++) // 一定要记得i<=cnt,否则可能死循环
{
if(x%prime[i]==0)
{
ll c=0;
while(x%prime[i]==0)
{
x/=prime[i];
c++;
}
if(c&1)ans*=prime[i];
}
}
if(x>1)ans*=x;
return ans;
}
int main()
{
ios::sync_with_stdio(false);
get_prime();
ll x;cin>>x;
printf("%lld\n",f(x));
return 0;
}
/*
999999999989
*/