P8754 [蓝桥杯 2021 省 AB2] 完全平方数

原题链接

题解

分解n的质因子,如果为奇数就补一个
由于大于 n 的质因子最多不超过一个,所以我们筛小于 1e6 的质数

code

#include<bits/stdc++.h>
#define ll long long
using namespace std;
vector<int> prime;
vector<int> minfac(1e6+3,0);
int main()
{


    for(ll k=2;k<=1e6+3;k++)
    {
        if(!minfac[k]) prime.push_back(k);
        for(int i=0;i<prime.size()&&prime[i]*k<=1e6+2;i++)
        {
            minfac[prime[i]*k]=1;
            if(k%prime[i]==0) break;
        }
    }


    ll n;
    cin>>n;
    ll x=1;
    for(int i=0;i<prime.size();i++)
    {
        int cnt=0;
        while(n%prime[i]==0)
        {
            n/=prime[i];
            cnt++;
        }
        if(cnt&1) x*=prime[i];
    }

    if(n!=1) x*=n;//检查是否有大于根号n的质因子
    cout<<x<<endl;

    return 0;
}

posted @   纯粹的  阅读(22)  评论(0编辑  收藏  举报
点击右上角即可分享
微信分享提示