Problem 1:Multiples of 3 and 5

原题地址:http://projecteuler.net/problem=1

Multiples of 3 and 5

Problem 1

If we list all the natural numbers below 10 that are multiples of 3 or 5, we get 3, 5, 6 and 9. The sum of these multiples is 23.

Find the sum of all the multiples of 3 or 5 below 1000.


大意是:

10以下的自然数中,属于3和5的倍数的有3,5,6和9,它们之和是23.

找出1000以下的自然数中,属于3和5的倍数的数字之和。



解法1:
从1遍历到1000,分别对3和5进行取模运算得到结果为0则累加起来。
python代码如下所示:
sum=0
for i in range(1,1000):
    if i%3 == 0 or i%5 == 0:
        sum+=i

print sum

解法2:
将所有是3的倍数的数字累加,将所有是5的倍数的数字累加,由于所有是15的倍数的数字在前面加了两次,需减去。在求和时可使用等差数列或者等比数列的求和公式。
python代码如下所示:
import math
def func_sum(target,base):
    n = math.floor(target/base)
    return base*n*(n+1)/2

print int(func_sum(999,3)+func_sum(999,5)-func_sum(999,15))


注:题目的中文翻译源自http://pe.spiritzhang.com

## Problem 5: Remainder Generator Like functions, generators can also be higher-order. For this problem, we will be writing `remainders_generator`, which yields a series of generator objects. `remainders_generator` takes in an integer `m`, and yields `m` different generators. The first generator is a generator of multiples of `m`, i.e. numbers where the remainder is 0. The second is a generator of natural numbers with remainder 1 when divided by `m`. The last generator yields natural numbers with remainder `m - 1` when divided by `m`. Note that different generators should not influence each other. > Hint: Consider defining an inner generator function. Each yielded generator varies only in that the elements of each generator have a particular remainder when divided by m. What does that tell you about the argument(s) that the inner function should take in? ```python def remainders_generator(m): """ Yields m generators. The ith yielded generator yields natural numbers whose remainder is i when divided by m. >>> import types >>> [isinstance(gen, types.GeneratorType) for gen in remainders_generator(5)] [True, True, True, True, True] >>> remainders_four = remainders_generator(4) >>> for i in range(4): ... print("First 3 natural numbers with remainder {0} when divided by 4:".format(i)) ... gen = next(remainders_four) ... for _ in range(3): ... print(next(gen)) First 3 natural numbers with remainder 0 when divided by 4: 4 8 12 First 3 natural numbers with remainder 1 when divided by 4: 1 5 9 First 3 natural numbers with remainder 2 when divided by 4: 2 6 10 First 3 natural numbers with remainder 3 when divided by 4: 3 7 11 """ "*** YOUR CODE HERE ***" ``` Note that if you have implemented this correctly, each of the generators yielded by `remainder_generator` will be infinite - you can keep calling next on them forever without running into a `StopIteration` exception.
06-01
Here's the implementation of the `remainders_generator` function: ```python def remainders_generator(m): def inner_generator(r): """ Yields natural numbers with remainder when divided by m. """ i = r while True: yield i i += m for r in range(m): yield inner_generator(r) ``` The `remainders_generator` function takes an integer `m` as input and defines an inner generator function `inner_generator`. This inner function yields natural numbers with remainder `r` when divided by `m`. It does this by starting with `i = r` and repeatedly adding `m` to `i` and yielding the result. The `remainders_generator` function then loops over `r` from `0` to `m-1` and yields `m` different instances of the `inner_generator` function, one for each possible remainder. Each yielded generator will produce an infinite sequence of natural numbers with the corresponding remainder. Here's how you can use the `remainders_generator` function: ```python # Test the remainders_generator function remainders_four = remainders_generator(4) for i in range(4): print("First 3 natural numbers with remainder {0} when divided by 4:".format(i)) gen = next(remainders_four) for j in range(3): print(next(gen)) ``` This code will output: ``` First 3 natural numbers with remainder 0 when divided by 4: 0 4 8 First 3 natural numbers with remainder 1 when divided by 4: 1 5 9 First 3 natural numbers with remainder 2 when divided by 4: 2 6 10 First 3 natural numbers with remainder 3 when divided by 4: 3 7 11 ``` As expected, the first generator produces multiples of 4, the second produces numbers with remainder 1, the third produces numbers with remainder 2, and the fourth produces numbers with remainder 3.
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值