点击跳转例题
思路:
题的范围为1e12,所以复杂度不能是o(n)以上,一个完全平方数得特点是什么:所以得因子的个数都是偶数。
所以我们分解n的质因数,只要是奇数个数的质因子乘起来就是答案。
代码:
#include <bits/stdc++.h> #define int long long //(有超时风险) #define PII pair<int,int> #define endl '\n' #define LL __int128 using namespace std; const int N=2e5+10,M=1e3+10,mod=998244353,INF=0x3f3f3f3f; int a[N],b[N],c[N],pre[N]; signed main() { std::ios::sync_with_stdio(false); std::cin.tie(nullptr); int n;cin>>n; map<int,int>mp; for(int i=2;i<=n/i;i++) { if(n%i==0) { while(n%i==0) { mp[i]++; n/=i; } } } if(n>1) mp[n]++; int ans=1; for(auto i:mp) { if(i.second%2==1) ans*=i.first; } cout<<ans<<endl; return 0; }