"""
这道题目直接告诉我们n是两个质因子的乘积, 所以我
们直接找较小的因子, 那么另外一个就是大的那个因子。
"""
n = int(input())
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
print(n // i)
break
"""
# 素数朴素判定
def is_prime(x):
if x <= 1:
return False
m = int(x ** 0.5)
for i in range(2, m + 1):
if x % i == 0:
return False
return True
# 欧拉筛算法
def euler_sieve(n):
# 筛选器都标记为质数
is_prime = [True] * (n + 1)
# 存储质数
primes = []
# 遍历所有数字
for i in range(2, n + 1):
# 通过筛选器判断是不是质数, 若是就加入数组中
if is_prime[i]:
primes.append(i)
# 遍历质数数组与当前数字进行计算, 将他们的乘积标记为合数
for p in primes:
if i * p > n:
break
is_prime[i * p] = False
# 如果当前这个数字i已经是某一个质数的倍数,此次循环结束
if i % p == 0:
break
return primes
n = int(input())
primes = euler_sieve(n)
for i in range(len(primes)):
if n % primes[i] != 0:
continue
tmp = n // primes[i] # 另一个因子
# 判断因子tmp是不是素数
if is_prime(tmp):
print(tmp)
break
# 会出现段错误: 2 * 10 ** 9 > 256MB // 4B, 数组长度超出内存限制
"""
06-10
“相关推荐”对你有帮助么?
-
非常没帮助
-
没帮助
-
一般
-
有帮助
-
非常有帮助
提交