do some new
This commit is contained in:
parent
e72ebe972d
commit
37925f580b
24
python/114.py
Normal file
24
python/114.py
Normal file
@ -0,0 +1,24 @@
|
||||
|
||||
def gen_block(length, mini):
|
||||
def gen_iter(result, lst, rest_count, rest_len, mini):
|
||||
if not rest_count:
|
||||
result.append(lst)
|
||||
else:
|
||||
rest_count -= 1
|
||||
for this_len in range(mini, rest_len - rest_count * mini + 1):
|
||||
gen_iter(result, lst + [this_len], rest_count, rest_len - this_len, mini)
|
||||
for block_count in range(1, int((length + 1) / (mini + 1)) + 1):
|
||||
block_maxlen = length - block_count + 1
|
||||
result = []
|
||||
gen_iter(result, [], block_count, block_maxlen, mini)
|
||||
for item in result:
|
||||
yield item
|
||||
|
||||
def put(length, lst):
|
||||
return length - sum(lst) - len(lst), len(lst) - 2
|
||||
|
||||
def count(length, mini):
|
||||
for x in gen_block(length, mini):
|
||||
print(x)
|
||||
|
||||
print(count(50, 3))
|
17
python/120.py
Executable file
17
python/120.py
Executable file
@ -0,0 +1,17 @@
|
||||
'''
|
||||
((a - 1) ** n + (a + 1) ** n) % (a ** 2) =
|
||||
2an % (a ** 2), if n is odd; 2, if n is oven
|
||||
'''
|
||||
|
||||
def pre_odd(q):
|
||||
n = int(q)
|
||||
if n == q:
|
||||
return n - (1 + n % 2)
|
||||
else:
|
||||
return n - (1 - n % 2)
|
||||
|
||||
def r_max(a):
|
||||
return max(map(lambda n: 2 * a * n % (a ** 2),
|
||||
map(lambda x: pre_odd(x), [a / 2, a, 3 * a / 2, 2 * a])))
|
||||
|
||||
print(sum(map(lambda x: r_max(x), range(3, 1001))))
|
20
python/121.py
Normal file
20
python/121.py
Normal file
@ -0,0 +1,20 @@
|
||||
'''
|
||||
if p is the probability that the player win, then expectation of banker's income will be
|
||||
probability p 1 - p
|
||||
income -n 1
|
||||
E = 1 - p - pn = 1 - (n + 1)p > 0
|
||||
so bonus = n + 1 < 1 / p
|
||||
'''
|
||||
|
||||
def p_trace(loop):
|
||||
base = 2
|
||||
p_lst = [1]
|
||||
for l in range(loop):
|
||||
p = 1 / base
|
||||
left = list(map(lambda x: x * p, p_lst)) + [0]
|
||||
right = [0] + list(map(lambda x: x * (1 - p), p_lst))
|
||||
p_lst = list(map(lambda x: x[0] + x[1], zip(left, right)))
|
||||
base += 1
|
||||
return sum(p_lst[:len(p_lst) // 2])
|
||||
|
||||
print(int(1 / p_trace(15)))
|
16
python/122.1.py
Normal file
16
python/122.1.py
Normal file
@ -0,0 +1,16 @@
|
||||
|
||||
def expand(limit):
|
||||
lst = [0] * (limit + 1)
|
||||
for cur in range(2, limit + 1):
|
||||
simple = lst[cur - 1]
|
||||
root = int(cur ** 0.5)
|
||||
if root ** 2 == cur:
|
||||
simple = min(simple, lst[root])
|
||||
if not cur % 2:
|
||||
simple = min(simple, lst[cur // 2])
|
||||
for half in range(2, (cur + 1) // 2):
|
||||
simple = min(simple, lst[half] + lst[cur - half])
|
||||
lst[cur] = simple + 1
|
||||
return lst
|
||||
|
||||
print(expand(15))
|
11
python/123.py
Normal file
11
python/123.py
Normal file
@ -0,0 +1,11 @@
|
||||
from tools import number_theory
|
||||
|
||||
def search(limit):
|
||||
prime = [1] + list(number_theory.make_prime(1000000))
|
||||
for n in range(1, len(prime), 2):
|
||||
p = prime[n]
|
||||
r = 2 * n * p % (p ** 2)
|
||||
if r > limit:
|
||||
return n
|
||||
|
||||
print(search(10 ** 10))
|
131
python/to_renew.md
Normal file
131
python/to_renew.md
Normal file
@ -0,0 +1,131 @@
|
||||
## 60 素数对的集合
|
||||
3、7、109和673是非常特别的一组素数。任取其中的两个并且以任意顺序连接起来,其结果仍然是个素数。例如,选择7和109,我们得到7109和1097均为素数。这四个素数的和是792,这是满足这个性质的一组四个素数的最小和。
|
||||
若有一组五个素数,任取其中的两个并且以任意顺序连接起来,其结果仍然是个素数,求这样一组素数的最小和。
|
||||
|
||||
## 62 立方数重排
|
||||
立方数41063625($345^3$)可以重排为另外两个立方数:56623104($384^3$)和66430125($405^3$)。实际上,41063625是重排中恰好有三个立方数的最小立方数。
|
||||
求重排中恰好有五个立方数的最小立方数。
|
||||
|
||||
## 75 唯一的整数边直角三角形
|
||||
只能唯一地弯折成整数边直角三角形的电线最短长度是12厘米;当然,还有很多长度的电线都只能唯一地弯折成整数边直角三角形,例如:
|
||||
|
||||
- **12厘米**: (3,4,5)
|
||||
- **24厘米**: (6,8,10)
|
||||
- **30厘米**: (5,12,13)
|
||||
- **36厘米**: (9,12,15)
|
||||
- **40厘米**: (8,15,17)
|
||||
- **48厘米**: (12,16,20)
|
||||
|
||||
相反地,有些长度的电线,比如20厘米,不可能弯折成任何整数边直角三角形,而另一些长度则有多个解;例如,120厘米的电线可以弯折成三个不同的整数边直角三角形。
|
||||
**120厘米**: (30,40,50), (20,48,52), (24,45,51)
|
||||
记电线长度为L,对于L ≤ 1,500,000,有多少种取值只能唯一地弯折成整数边直角三角形?
|
||||
|
||||
## 78 硬币分拆
|
||||
记p(n)是将n枚硬币分拆成堆的不同方式数。例如,五枚硬币有7种分拆成堆的不同方式,因此p(5)=7。
|
||||
|
||||
OOOOO
|
||||
OOOO O
|
||||
OOO OO
|
||||
OOO O O
|
||||
OO OO O
|
||||
OO O O O
|
||||
O O O O O
|
||||
|
||||
找出使p(n)能被一百万整除的最小n值。
|
||||
|
||||
## 96 数独
|
||||
|
||||
|
||||
## 111 **有重复数字的素数**
|
||||
|
||||
考虑一个有重复数字的4位素数,显然这4个数字不能全都一样:1111被11整除,2222被22整除,依此类推;但是,有9个4位素数包含有三个一:
|
||||
|
||||
1117, 1151, 1171, 1181, 1511, 1811, 2111, 4111, 8111
|
||||
|
||||
我们记M(n, d)是n位素数中数字d重复出现的最多次数,N(n, d)是这类素数的个数,而S(n, d)是这类素数的和。
|
||||
|
||||
因此M(4, 1) = 3是4位素数中数字1重复出现的最多次数,有N(4, 1) = 9个这类素数,而它们的和是S(4, 1) = 22275。还能得出,对于d = 0,在4位素数中最多重复出现M(4, 0) = 2次,但是有N(4, 0) = 13个这类素数。
|
||||
|
||||
同样地,我们可以得到4位素数的如下结果。
|
||||
|
||||
| **数字d** | **M(4, d)** | **N(4, d)** | **S(4, d)** |
|
||||
| ------- | ----------- | ----------- | ----------- |
|
||||
| 0 | 2 | 13 | 67061 |
|
||||
| 1 | 3 | 9 | 22275 |
|
||||
| 2 | 3 | 1 | 2221 |
|
||||
| 3 | 3 | 12 | 46214 |
|
||||
| 4 | 3 | 2 | 8888 |
|
||||
| 5 | 3 | 1 | 5557 |
|
||||
| 6 | 3 | 1 | 6661 |
|
||||
| 7 | 3 | 9 | 57863 |
|
||||
| 8 | 3 | 1 | 8887 |
|
||||
| 9 | 3 | 7 | 48073 |
|
||||
|
||||
对于d = 0至9,所有S(4, d)的和为273700。
|
||||
|
||||
求所有S(10, d)的和。
|
||||
|
||||
## 112 **弹跳数**
|
||||
|
||||
从左往右,如果每一位数字都大于等于其左边的数字,这样的数被称为上升数,比如134468。
|
||||
|
||||
同样地,如果每一位数字都大于等于其右边的数字,这样的数被称为下降数,比如66420。
|
||||
|
||||
如果一个正整数既不是上升数也不是下降数,我们就称之为“弹跳”数,比如155349。
|
||||
|
||||
显然不存在小于一百的弹跳数,而在小于一千的数中有略超过一半(525)的弹跳数。事实上,使得弹跳数的比例恰好达到50%的最小数是538。
|
||||
|
||||
令人惊奇的是,弹跳数将变得越来越普遍,到21780时,弹跳数的比例恰好等于90%。
|
||||
|
||||
找出使得弹跳数的比例恰好为99%的最小数。
|
||||
|
||||
## 113 **非弹跳数**
|
||||
|
||||
从左往右,如果每一位数字都大于等于其左边的数字,这样的数被称为上升数,比如134468。
|
||||
|
||||
同样地,如果每一位数字都大于等于其右边的数字,这样的数被称为下降数,比如66420。
|
||||
|
||||
如果一个正整数既不是上升数也不是下降数,我们就称之为“弹跳”数,比如155349。
|
||||
|
||||
随着n的增长,小于n的弹跳数的比例也随之增长;在小于一百万的数中,只有12951个非弹跳数,而小于$10^{10}$的数中只有277032个非弹跳数。
|
||||
|
||||
在小于一古戈尔($10^{100}$)的数中有多少个非弹跳数?
|
||||
|
||||
## 130 **满足素数循环单位数性质的合数**
|
||||
|
||||
只包含数字1的数被称为循环单位数,我们定义R(k)是长为k的循环单位数,例如,R(6) = 111111。
|
||||
|
||||
如果n是一个整数,且GCD(n, 10) = 1,可以验证总存在k使得R(k)能够被n整除,并且记A(n)是这些k中最小的一个。例如,A(7) = 6,而A(41) = 5。
|
||||
|
||||
已知对于素数p > 5,p − 1能够被A(p)整除。例如,当p = 41时,A(41) = 5,而40能够被5整除。
|
||||
|
||||
然而,有很少的一部分合数也满足这条性质,前5个这样的数分别是91,259,451,481以及703。
|
||||
|
||||
找出前25个合数n满足
|
||||
GCD(n, 10) = 1且n − 1能够被A(n)整除,并求它们的和。
|
||||
|
||||
## 132 **大循环单位数的因数**
|
||||
|
||||
只包含数字1的数被称为循环单位数,我们定义R(k)是长为k的循环单位数。
|
||||
|
||||
例如,R(10) = 1111111111 = 11×41×271×9091,这些质因数的和是9414。
|
||||
|
||||
找出R($10^9$)的前40个质因数的和。
|
||||
|
||||
## 134 **质数对连接**
|
||||
|
||||
考虑连续的质数$p_1$ = 19和$p_2$ = 23。可以验证,1219是所有以$p_1$结尾并且能被$p_2$整除的数中最小的一个。
|
||||
|
||||
事实上,除了$p_1$ = 3和$p_2$ = 5这一对之外,对于任意一对连续质数$p_2$ > $p_1$,都存在一系列的数n,其尾数是$p_1$,且能够被$p_2$整除。记S是所有的n中的最小值。
|
||||
|
||||
对于5 ≤ p1 ≤ 1000000内的所有连续质数对,求∑ S。
|
||||
|
||||
## 138 **特殊等腰三角形**
|
||||
|
||||
考虑底为b = 16,腰为L = 17的等腰三角形。
|
||||
|
||||
使用毕达哥拉斯定理,我们可以求出三角形的高是h = $\sqrt{17^2-8^2}$ = 15,恰好比底长小1。
|
||||
|
||||
当b = 272而L = 305时,可以算出h = 273,恰好比底长大1,而且这是满足性质h = b ± 1的三角形中第二小的。
|
||||
|
||||
对于最小的12个满足h = b ± 1且b,L均为正整数的等腰三角形,求∑ L。
|
Loading…
x
Reference in New Issue
Block a user