思路
将题目分成2部分考虑
第一部分: 给出的数是完全平方数,那么答案就是1
第二部分: 给出的数是非完全平方数,可以将这个数分解成一个完全平方数和一个非完全平方数(这个数不能可再分成一个除1以外的完全平方数与一个任意数的乘积)的乘积,那么答案就是这个非完全平方数
例如:
15=1^2*15,答案是15
由分析可以得出,只需要寻找这个数的因子中的最大完全平方数,就可以计算出答案
C++ 代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
ll n;
int main(){
cin>>n;
ll res = n;
ll t = sqrt(n);
if(t*t == n) cout<<1<<endl; // 完全平方数特判
else{
for(ll i=t-1; i>=2; i--){
ll m = i*i;
if(n%m==0){ // 找到因子中最大的完全平方数
res = n/m; // 求得答案
break;
}
}
cout<<res<<endl;
}
}