所属作业: hw4
算法: 循环
描述
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
输入
包括两个整数N、M。N不超过1,000,000。
输出
输出一个整数a,表示结果。如果某个案例中满足条件的正整数不存在,则在对应行输出-1
样例输入
35 10
样例输出
5
题目分析
因子是什么?假如整数n除以m,结果是无余数的整数,那么我们称m就是n的因子。
a和(M-a)都是N的因子等价于a整除N且M-a整除N。
样例输入2
7 8
样例输出2
1
样例输入3
7 14
样例输出3
7
注意:N的因子包括N
1
2
3
4
5
6
7
8
9
| # 错误代码1
N, M = input().split()
N, M = int(N), int(M)
answer = -1
for i in range(1, N + 1):
if N % i == 0 and N % (M - i) == 0:
answer = i
break
print(answer)
|
样例输入3
7 7
样例输出3
-1
代码1运行结果:
if N % i == 0 and N % (M - i) == 0:
^~~~~~~
ZeroDivisionError: integer modulo by zero
注意:i不能等于M
1
2
3
4
5
6
7
8
9
| # 错误代码2
N, M = input().split()
N, M = int(N), int(M)
answer = -1
for i in range(1, M):
if N % i == 0 and N % (M - i) == 0:
answer = i
break
print(answer)
|
样例输入4
14 7
样例输出4
14
代码2运行结果:
-1
注意:N的因子可以是负数,(M - i)可以是负数。i可以大于M
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
| # 正确代码
N, M = input().split()
# 将字符串转换为整数
N, M = int(N), int(M)
# 初始化答案为 -1,表示默认没有找到符合条件的 a
answer = -1
# 遍历从 1 到 N 的所有正整数 i
for i in range(1, N + 1):
# 检查 i 是否是 N 的因子
# 同时检查 M - i 是否不为 0 并且是 N 的因子
if N % i == 0 and M - i != 0 and N % (M - i) == 0:
# 如果条件满足,更新答案为 i
answer = i
# 找到第一个符合条件的 a,退出循环
break
# 输出结果,如果没有找到符合条件的 a,则输出 -1
print(answer)
|