题目传送门:
Hangzhou High School OJ (techo.cool)
一道朴实无华的题:)朴实到甚至没有给数据范围,TLE了半天。。。。。。
试除法:
import math
num=int(input());print(num,str("="),sep='',end='');ans=[]
def num1(a):
for i in range(2,math.ceil(math.sqrt(a))):
if a%i==0:
return 0
return 1
if num1(num):
print(num)
for i in range(2,num):
if num1(i) and num%i==0:
while num%i==0:
ans.append(i);num/=i
print('*'.join(str(x) for x in ans))
新建一个数组,首先判断输入,若是质数直接输出
然后在2到num间循环,寻找可以被整除的质数,当然这里的2到num间循环可以优化为2到sqrt(num),这样的话就是O(sqrt(n)),当然这和Pollad's Rho有很大差距。
注意判断质数时同样只要到sqrt(n)开方,因为如果一个数不是质数,那么对应的两个因数,必然一个大于根号num,一个小于根号num.
然后再说一下输出,这个输出可以将"*"与字符串绑定,从而做到在元素间有*,而最后没有*