|
发表于 2017-9-27 21:48:57
|
显示全部楼层
print('What is the smallest positive number that is evenly divisible by all \
of the numbers from 1 to 20')
print('--------------------------------------------------------------------')
import math
import time
def IsPrime(n): #判断是否为质数的函数
Nsqrt = math.ceil(n ** 0.5)
Jug = 0
for i in range(2,Nsqrt+1):
if n % i == 0:
Jug = 0
break
else:
Jug = 1
if (n == 2) or (n == 1):
Jug = 1
return Jug
def Facting(n):
FacList = [] #将分解出来的质数放入该列表
if IsPrime(n) == 1:
FacList = [n]
else:
for i in range(2,math.ceil(n/2)+1):
if n % i != 0:
continue
else:
while (n % i == 0):
FacList.append(i)
n = n/i
return FacList
def FindSmall(Nums=[]):
start = time.clock()
NumCList = []
EvenNum = []
PrimeNum = []
NumFact = [] #用于存储分解质因数
NumC = 0 #用于统计最多出现次数
Smallsum = 1
for i in Nums:
if IsPrime(i) == 1:
PrimeNum.append(i)
else:
EvenNum.append(i)
for j in PrimeNum: #循环目的:找出每个质数出现的最大次数
NumC = 0
for k in Nums: #循环目的:找出同一个质数出现的最大次数
NumFact = Facting(k)
A = NumFact.count(j)
if A >= NumC:
NumC = A
NumCList.append(NumC) #将最大次数写进列表,并且,是与质数表一一对应
print(PrimeNum)
print(NumCList)
t = 0
while t < len(PrimeNum)-1:
t += 1
Smallsum = Smallsum * (int(PrimeNum[t]) ** int(NumCList[t]))
print(Smallsum)
end = time.clock()
print("运行时间:%fs" %(end - start))
该数组所有的质数是: [1, 2, 3, 5, 7, 11, 13, 17, 19]
每个质数对应的次幂: [1, 4, 2, 1, 1, 1, 1, 1, 1]
232792560
运行时间:0.001115s |
|