给定正整数 n,现在要找到一个最小正整数 x,使得 x 能整除 n,并且结果 n/x 是一个完全平方数(即存在一个整数 y,y2=n/x)。
输入格式:
整数 n(1≤n≤109)。
输出格式:
输出最小的正整数 x。
输入样例:
50
输出样例:
2
#include<stdio.h>
#include<math.h>
#include<stdbool.h>
bool fun(int num){
if(num < 0)
return false;
if(num == 0 || num == 1)
return true;
int root = sqrt(num);
return root * root == num;
}
int find(int n){
for(int x = 1; x <= sqrt(n); x++){
if(n % x == 0){
int y = n / x;
if(fun(y)){
return x;
}
}
}
return n;
}
int main(){
int n;
scanf("%d", &n);
int x = find(n);
printf("%d\n", x);
return 0;
}
从根号n开始判断能大大提高运行的速度,并且通过调用fun函数来检查是否符合要求