果园里有一堆苹果,一共n头(n大于1小于8)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个?
果园里有一堆苹果,一共n头(n大于1小于8)熊来分,第一头为小东,它把苹果均分n份后,多出了一个,它扔掉了这一个,拿走了自己的一份苹果,接着第二头熊重复这一过程,即先均分n份,扔掉一个然后拿走一份,以此类推直到最后一头熊都是这样(最后一头熊扔掉后可以拿走0个,也算是n份均分)。问最初这堆苹果最少有多少个?
给定一个整数n,表示熊的头数
返回最初的苹果数。保证有解。
2
3
从后往前推,知道为什么小熊数量有限制了,上了9个后花了十几秒...
class Apples: def getInitial(self, n): if n == 2: return 3 else: begin = 1 #如果不是2个小熊,那么最后一个小熊最少得到一个,初始化从1开始 b = 0 while True: res = begin * n + 1 for i in range(n-1): a,b = divmod(res,n-1) if b != 0: break res = a*n + 1 #余数一直为零才符合要求 if b != 0: begin += 1 else: return res
# -*- coding:utf-8 -*- #设苹果总数x, 由题意知(x+n-1) 可被n 整除,第一只熊分到 (x+n-1)/n只苹果(分到的+扔掉的) #此时还剩下(n-1)(x+n-1)/n 只苹果。 第二只熊分得 (n-1)(x+n-1)/n^2 只苹果(分到的+扔掉的) #依次类推 , 最后一只熊(分到+扔掉)K= (n-1)^(n-1)(x+n-1)/n^n 只苹果 #K 为自然数,故分子必须是n^n的倍数 #由于(n-1)^(n-1) 与 n^n 互质, 则必有 (x+n-1) = t * n^n #显然 t 取 1 时x 最小, x= n^n -n+1 class Apples: def getInitial(self, n): ans=n**n-n+1 return ans