Codeforces 1088A - Ehab and another construction problem
题解链接
题目链接
https://codeforces.com/contest/1088/problem/A
题目
Given an integer x x x, find 2 integers a a a and b b b such that:
- 1 ≤ a , b ≤ x 1 \le a,b \le x 1≤a,b≤x
- b b b divides a a a ( a a a is divisible by b b b).
- a ⋅ b > x a \cdot b > x a⋅b>x.
- a b < x \frac{a}{b} < x ba<x.
题意
给你一个 x x x,让你找一对 a a a、 b b b,使得 a a a、 b b b满足上述条件。
思路
显然 x x x等于 1 1 1的时候无解,故特判掉,之后虽然可以观察出来解,但还是证明一下吧。
令: a = k ⋅ b ( k ∈ Z ) a = k \cdot b\ (k \in Z) a=k⋅b (k∈Z)
则有: k ⋅ b ⋅ b > x k \cdot b \cdot b > x k⋅b⋅b>x、 k < x k < x k<x同时成立。
不妨设: k = 1 k = 1 k=1,则有: b 2 > x b ^ 2 > x b2>x,此时 a = b a = b a=b,
即:取 a = b = x a = b = x a=b=x即可。
实现
#include <bits/stdc++.h>
typedef long long ll;
int main() {
ll x;
std::cin >> x;
if (x == 1) puts("-1");
else printf("%lld %lld\n", x, x);
return 0;
}