From 37925f580b7a4681d3d1448fd10aa588ed33ae9f Mon Sep 17 00:00:00 2001 From: "xw_y_am@rmbp" Date: Mon, 11 Sep 2017 21:30:16 +0800 Subject: [PATCH] do some new --- python/114.py | 24 +++++++++ python/120.py | 17 ++++++ python/121.py | 20 +++++++ python/122.1.py | 16 ++++++ python/123.py | 11 ++++ python/to_renew.md | 131 +++++++++++++++++++++++++++++++++++++++++++++ 6 files changed, 219 insertions(+) create mode 100644 python/114.py create mode 100755 python/120.py create mode 100644 python/121.py create mode 100644 python/122.1.py create mode 100644 python/123.py create mode 100644 python/to_renew.md diff --git a/python/114.py b/python/114.py new file mode 100644 index 0000000..8b11981 --- /dev/null +++ b/python/114.py @@ -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)) diff --git a/python/120.py b/python/120.py new file mode 100755 index 0000000..7d1c17d --- /dev/null +++ b/python/120.py @@ -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)))) diff --git a/python/121.py b/python/121.py new file mode 100644 index 0000000..a722dd9 --- /dev/null +++ b/python/121.py @@ -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))) diff --git a/python/122.1.py b/python/122.1.py new file mode 100644 index 0000000..3414af4 --- /dev/null +++ b/python/122.1.py @@ -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)) diff --git a/python/123.py b/python/123.py new file mode 100644 index 0000000..3e7a836 --- /dev/null +++ b/python/123.py @@ -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)) diff --git a/python/to_renew.md b/python/to_renew.md new file mode 100644 index 0000000..7208736 --- /dev/null +++ b/python/to_renew.md @@ -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。 \ No newline at end of file