C. Fadi and LCM
time limit per test1 second
memory limit per test256 megabytes
inputstandard input
outputstandard output
Today, Osama gave Fadi an integer X, and Fadi was wondering about the minimum possible value of max(a,b) such that LCM(a,b) equals X. Both a and b should be positive integers.
LCM(a,b) is the smallest positive integer that is divisible by both a and b. For example, LCM(6,8)=24, LCM(4,12)=12, LCM(2,3)=6.
Of course, Fadi immediately knew the answer. Can you be just like Fadi and find any such pair?
Input
The first and only line contains an integer X (1≤X≤1012).
Output
Print two positive integers, a and b, such that the value of max(a,b) is minimum possible and LCM(a,b) equals X. If there are several possible such pairs, you can print any.
Examples
input
2
output
1 2
input
6
output
2 3
input
4
output
1 4
input
1
output
1 1
题意:
给你一个数字x,让你求出两个数a,b并且使max(a,b)最小且lcm(a,b)为x。
思路:
首先要最小公倍数为x,那么就有a * b / gcd(a,b)出现,要使a,b最小,那么gcd(a,b)最小应该要是1,也就是a * b/1=x即a * b=x且gcd(a,b) = 1,然后枚举就行了。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <cmath>
#include <algorithm>
using namespace std;
typedef long long ll;
template <class T>
inline void read(T &ret) {
char c;
int sgn;
if (c = getchar(), c == EOF) return ;
while (c != '-' && (c < '0' || c > '9')) c = getchar();
sgn = (c == '-') ? -1:1;
ret = (c == '-') ? 0:(c - '0');
while (c = getchar(), c >= '0' && c <= '9') ret = ret * 10 + (c - '0');
ret *= sgn;
return ;
}
ll gcd(ll a, ll b) {
if (b == 0) return a;
else gcd(b, a % b);
}
int main() {
ll n;
read(n);
ll x = sqrt(n);
if (x * x == n) x -= 1;
for (ll i = x; i >= 1; i--) {
if (n % i == 0) {
if (gcd(n / i, i) == 1) {
printf("%lld %lld", i, n / i);
return 0;
}
}
}
printf("1 %lld", n);
return 0;
}