题目描述
果园里有堆苹果,N(1<N<9)只熊来分。第一只熊把这堆苹果平均分为N份,多了一个,它把多的一个扔了,拿走了一份。第二只熊把剩下的苹果又平均分成N份,又多了一个,它同样把多的一个扔了,拿走了一份,第三、第四直到第N只熊都是这么做的,问果园里原来最少有多少个苹果?
… | … |
---|---|
输入 输入1个整数,表示熊的个数。它的值大于1并且小于9。 |
样例输入 5 |
输出 为1个数字,表示果园里原来有的苹果个数。 |
样例输出 3121 |
时间限制 C/C++语言:1000MS 其它语言:3000MS |
内存限制 C/C++语言:65536KB 其它语言:589824KB |
原始代码的速度那是相当慢
i=0
那行注释部分其实是优化,缩小了“分到最后还剩多少苹果i”的搜索范围
#!/usr/bin/env python
# coding=utf-8
t = int(raw_input())
for n in range(2, t+1):
i = 0# if n<4 else m*(n-1)
while 1:
i += 1
m = i
for j in range(n,0,-1):
if m%(n-1)==0:
m = m*n/(n-1)+1
else:
break
else:
break
print m
但是,看到别人家的代码,我震惊了:
N = int(raw_input())
apple = N**N -N + 1
print apple
原来这是一道数列题:
设:aiai是第ii只熊来分苹果前,剩余的苹果数。
由于扔掉一个苹果后,刚好能分为
份,那么:
ai−1=n∗biai−1=n∗bi,其中bibi是整数;
ai+1−1=(ai−1)−(