Description
一个整数 a 是一个完全平方数,是指它是某一个整数的平方,即存在一个整数 b,使得 a = b^2。给定一个正整数 n,请找到最小的正整数 x,使得它们的乘积是一个完全平方数。
Format
Input
输入一行包含一个整数 n。
Output
输出找到的最小的正整数 x。
Samples
输入数据 1
12
Copy
输出数据 1
3
Copy
Limitation
对于 30% 的评测用例,1≤n≤1000,答案不超过 1000。
对于 60% 的评测用例,1 ≤ n ≤ 10^8,答案不超过 10^8。
对于所有评测用例,1≤n≤10^12,答案不超过 10^12。
思路:
将题目所给的数 n 分解成最小质因数(唯一分解定理),判断每一个最小质因数的数量(每个最小质因数的数量都为偶数则是完全平方数):
如果最小质因数的数量为偶数,则是个完全平方数
如果是个奇数,说明不是最小质因数,需要乘以一个相同的质因数将奇数变成偶数。
注意: 题目所给的数据范围,所以变量的类型为 long long
#include <stdio.h>
#include <math.h>
#include <algorithm>
#include <iostream>
#include <string.h>
#include <queue>
#include <stack>
#include <map>
#include <set>
#include <vector>
//#include <priority_queue>
using namespace std;
#define ll long long
const int INF=0x3f3f3f3f;
ll ans,n;
ll sum=1;
int main() {
cin>>n;
if(n==1) {
cout<<4;
return 0;
}
ll i=2,temp=0;
while(n!=1) {
if(n%i==0) {
n/=i;
temp++;
if(n==1) {
if(temp>0&&temp%2!=0) {
sum*=i;
}
}
} else {
if(temp>0&&temp%2!=0) {
sum*=i;
temp=0;
i++;
} else
i++;
}
}
cout<<sum;
return 0;
}