问题 J: 最小平方数(Ⅱ)
时间限制: 1 Sec 内存限制: 128 MB
题目描述
已知正整数n,求最小的正整数x,使得n*x是一个平方数。例如n=12,则最小的x是3,n*x为36是一个平方数。
输入
仅一个正整数n,n <
输出
输出最小的正整数x。
样例输入
4
样例输出
1
思路
我们令
(
是一个平方数,
为正整数)
然后两边同时乘以
得
得
可知
的最小可能值就是
![]()
要使
最小 就要让
最大 但是
所以
从
开始减小到1。
#include <bits/stdc++.h>
using namespace std;
int main(){
int n,ans;
scanf("%d",&n);
for (int i = sqrt(n) ; i >= 0 ; i--) {
if (n%(i*i)==0) {
ans = n/(i*i) ;
break ;
}
}
printf("%d",ans);
return 0;
}
/**************************************************************
Problem: 1751
User: 21XXXXXXXX
Language: C++
Result: 正确
Time:0 ms
Memory:2036 kb
****************************************************************/