题目大意
给一个正整数 N N N,要求出它所有的质因数
输入
每组包含一个测试用例,每个测试用例是一个正整数 N N N,范围在长整形之内
输出
输出
N
N
N所有的质因数,格式为:
N
=
p
1
k
1
×
p
2
k
2
×
⋯
×
p
m
k
m
N=p_1^{k_1} \times p_2^{k_2} \times \cdots \times p_m^{k_m}
N=p1k1×p2k2×⋯×pmkm
p
p
p是质因数,
k
k
k是质因数的指数
样例输入
97532468
样例输出
97532468=2^2*11*17*101*1291
解析
利用素数筛法生成一张素数表,但是这张表的大小不好确定。
按照道理来讲,
N
N
N的范围在长整型以内,所以素数表的长度就应该是长整型的最大值以防止极端情况。
但是这样所需要的空间就太大了。。。
然后我就不断地去试数据,发现素数表的长度等于2000的时候就AC了。。。
# -*- coding: utf-8 -*-
# @Time : 2019/6/22 11:01
# @Author : ValarMorghulis
# @File : 1059.py
maxn = 2000
t = [True for i in range(maxn)]
def init():
global t
for i in range(2, maxn):
if t[i]:
# prime.append(i)
j = 2
while j * i < maxn:
t[j * i] = False
j += 1
def solve():
n = eval(input())
print("%d=" % n, end='')
if n == 1:
print(1, end='')
i, cnt = 2, 0
flag = False
while n > 1:
while not t[i] or n % i:
i += 1
while n % i == 0:
n //= i
cnt += 1
if flag:
print('*', end='')
else:
flag = True
print("%d" % i, end='')
if cnt > 1:
print("^%d" % cnt, end='')
cnt = 0
print('')
if __name__ == "__main__":
init()
solve()