题目链接
题目描述
给定一个正整数 ,请你构造一个由两个正整数
组成的数对,使其同时满足下列全部条件:
整除
(即
)
若存在多个满足要求的数对,你可以输出其中任意一个;若不存在,则输出 -1。
解题思路
这是一个构造性的问题。题目要求我们找到任意一个满足条件的数对即可,这通常暗示我们可以尝试寻找一个非常简单的、通用的构造方案,而不是去复杂地搜索。
让我们来尝试一个最简单的构造:令 且
。现在我们来验证这个数对
是否满足所有条件。
-
条件 1:
。只要给定的
,这个条件就成立。
-
条件 2:
整除
整除
。这总是成立的。
-
条件 3:
- 当
是正整数时,这个不等式在
时成立。
-
条件 4:
- 这个不等式同样在
时成立。
结论:
综合以上分析,我们发现只要 ,数对
就同时满足了所有四个条件。
特殊情况:
我们需要单独考虑 的情况。
当
时,根据条件 1,唯一可能的数对是
。
我们来验证这个数对:
- 条件 1:
(满足)
- 条件 2:
整除
(满足)
- 条件 3:
(不满足)
- 条件 4:
(不满足) 由于条件 3 和 4 不满足,所以当
时,不存在满足条件的数对。
最终策略:
- 如果输入的
为
,则无解,输出 -1。
- 如果输入的
大于
,则数对
是一个有效的解,输出
和
。
这个策略非常简单,并且覆盖了所有情况。
代码
#include <iostream>
using namespace std;
int main() {
long long x;
cin >> x;
if (x == 1) {
cout << -1 << endl;
} else {
cout << x << " " << x << endl;
}
return 0;
}
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
long x = sc.nextLong();
if (x == 1) {
System.out.println(-1);
} else {
System.out.println(x + " " + x);
}
}
}
x = int(input())
if x == 1:
print(-1)
else:
print(x, x)
算法及复杂度
- 算法:数学构造
- 时间复杂度:
,只需要进行一次判断和输出。
- 空间复杂度:
,只需要常数级别的额外空间。