do some new

This commit is contained in:
xw_y_am@rmbp 2017-09-11 21:30:16 +08:00
parent e72ebe972d
commit 37925f580b
6 changed files with 219 additions and 0 deletions

24
python/114.py Normal file
View 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
View 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
View 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
View 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
View 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
View 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 > 5p 1能够被A(p)整除。例如当p = 41时A(41) = 5而40能够被5整除。
然而有很少的一部分合数也满足这条性质前5个这样的数分别是91259451481以及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且bL均为正整数的等腰三角形求∑ L。