核桃的数量
考点:最大公因数和最小公倍数
首先得到每个数字的所有因子
找出两个数字的所有相同因子,最大的那个就是最大公因数
a,b最小公倍数=a*b/a,b的最大公因数
num1,num2,num3 = map(int,input().split())
def get_divisors(number):
list = []
#这个数本身也是该数的因子
for i in range(1,number+1):
if(number%i==0):
list.append(i)
return list #返回number的所有因子
def get_max(number1,number2):
list1 = get_divisors(number1)
list2 = get_divisors(number2)
#把这两个数变成集合求并集,然后在并集中返回最大值即为最大公因数
return max(set(list1)&set(list2))
def get_min(number1,number2):
temp = get_max(number1,number2)
return int(number1*number2/temp)
a = get_min(num1,num2)
print(get_min(a,num3))
乘积尾零
求乘积中含有几个零,进分析得只有25可得到一个零,其他因子相乘不含零,且一个2一个5可得到一个零,题目即可转化为有多少个2和多少个5,去二者中较少的即为结果
def ling(n):
tcnt = 0
fcnt = 0
while n%2==0 or n%5==0:
if n%2==0:
tcnt+=1
n = n/2
elif n%5==0:
fcnt+=1
n = n/5
return tcnt,fcnt
t_cnt = 0
f_cnt = 0
num = int(input())
n1,n2 = ling(num)
t_cnt +=n1
f_cnt+=n2
if t_cnt>f_cnt:
print(f_cnt)
else:
print(t_cnt)
第几个幸运数
求一个数字是第几个含有3,5,7因子的数,因为含有3,5,7因子的数字可以表示为3*i+5*j+7*k
的形式,问题即转化为求该数字前有多少个可以表示用此形式表示的数字,直接用三重for循环暴力解题
import math
num = int(input())
c = 0
for i in range(int(math.log(num,3))+1):
for j in range(int(math.log(num,5))+1):
for k in range(int(math.log(num,7))+1):
if pow(3,i)*pow(5,j)*pow(7,k)<=num:
c+=1
print(c-1)