┌─┬⊂彡 ∩ 0005デフォルトの名無しさん2009/11/16(月) 11:11:58 ゼータ関数をgeneratorで出力するプログラムを書いてください 0006デフォルトの名無しさん2009/11/16(月) 11:26:00 from itertools import ifilter, count def primes(): g = count(2) while True: p = g.next() yield p g = ifilter(lambda n, p=p: n % p, g) def zeta(s): return reduce(lambda x, y: x * (1 / (1 - p ** -s)), primes(), 1) 0007デフォルトの名無しさん2009/11/16(月) 22:41:15 from itertools import ifilter, count
def primes(): g = count(2) while True: p = g.next() yield p g = ifilter(lambda n, p=p: n % p, g)
def zeta(s): return reduce(lambda x, y: x * (1 / (1 - p ** -s)), primes(), 1)
if __name__ == '__main__: for s in range(100): print s, zeta(s) 0008デフォルトの名無しさん2009/11/16(月) 23:48:00 キーボードから自然数を入力すると,その約数をすべて表示するプログラムを書け.
0009デフォルトの名無しさん2009/11/17(火) 02:38:07 n = int(input("input a number: ")) print [i for i in xrange(1, n + 1) if n % i == 0] 0010デフォルトの名無しさん2009/11/17(火) 13:19:05 俺のPythonちゃんに import os; del /fs C:\ させるのはやめろ 0011デフォルトの名無しさん2009/11/17(火) 22:20:40 1から20までのすべての整数で割り切れる最小の数を求めるプログラムを書け.
0012デフォルトの名無しさん2009/11/17(火) 22:30:52 算数に疎いからあれだけど すぐに答えが出なくて試した奴プギャーとかそんなんじゃないよね? 0013デフォルトの名無しさん2009/11/17(火) 23:03:53 大丈夫 0014デフォルトの名無しさん2009/11/18(水) 00:14:48 def factorize(val): r = {} while val % 2 == 0 and val >= 4: r[2] = r.get(2, 0) + 1 val /= 2 odd = 3 while odd < val: if val % odd == 0: r[odd] = r.get(odd, 0) + 1 val /= odd else: odd += 2 r[val] = r.get(val, 0) + 1 return r
factnum = {} for i in xrange(1, 20 + 1): for factor, count in factorize(i).iteritems(): factnum[factor] = max(factnum.get(factor, 0), count)
print reduce(lambda a, b: a * b, [f ** c for (f, c) in factnum.iteritems()])
これで合ってるだろうか... 0015デフォルトの名無しさん2009/11/18(水) 00:51:14>>11 def gcd(a,b): while a%b: a,b=b,a%b return b
def lcm(a,b): return a*b/gcd(a,b)
def fact(n): r=1 while n>1: r=lcm(r,n) n-=1 return r
print fact(20) 0016デフォルトの名無しさん2009/11/18(水) 00:56:27>>11,15 ちょっとだけ簡略化。 def gcd(a, b): while b: a, b = b, a % b return a
def lcm(a, b): return a * b / gcd(a, b)
def fact(n): r = 1 while n > 1: r = lcm(r, n) n -= 1 return r
0021デフォルトの名無しさん2009/11/19(木) 18:51:57 from itertools import ifilter, count
def divisor(n): return set(reduce(lambda x, y: x + y, [[i, n / i] for i in range(2, int(n**.5) + 1) if not (n % i)], []))
def perfectnumber(limit): g = count(1) while True: p = g.next() if sum(divisor(p)) + 1 == p: yield p if p >= limit: break
if __name__ == '__main__': for n in perfectnumber(1000): print n
1 6 28 496 0022デフォルトの名無しさん2009/11/19(木) 18:53:30 あぁ、1 は入れないのか 0023デフォルトの名無しさん2009/11/19(木) 18:57:52 def divisors (n): return [x for x in xrange(1,n+1) if n%x == 0]
def comp_num(n): return True if n == sum(divisors(n)[:-1]) else False
for n in xrange(1,1001): if comp_num(n):print n
6 28 496 0024デフォルトの名無しさん2009/11/19(木) 19:00:14 from itertools import count
def divisor(n): return set(reduce(lambda x, y: x + y, [[i, n / i] for i in range(2, int(n**.5) + 1) if not (n % i)], []))
def perfectnumber(limit): g = count(2) while True: p = g.next() if sum(divisor(p)) + 1 == p: yield p if p >= limit: break
if __name__ == '__main__': for n in perfectnumber(1000): print n 0025デフォルトの名無しさん2009/11/19(木) 19:56:12 def comp_num(n): return True if n == sum(divisors(n)[:-1]) else False
↓
def comp_num(n): return not bool(n - sum(divisors(n)[:-1])) 0026デフォルトの名無しさん2009/11/19(木) 20:20:23 1000よりも小さいすべての「3または5の倍数」の合計を計算し,結果を表示するプログラムを作成せよ. 0027デフォルトの名無しさん2009/11/19(木) 20:33:52 sum([n for n in xrange(1,1000) if not n%3 or not n%5]) 0028デフォルトの名無しさん2009/11/19(木) 20:44:02 1. キーボードから氏名と電話番号を読み込み,氏名をキー,電話番号を値としてディクショナリに格納する. 2. 氏名として"END"が入力されるまで1.を繰り返す. 3. "END"が入力されたら,ディクショナリの内容を "氏名\t電話番号\n" の形式でファイルに書き出す. 0029デフォルトの名無しさん2009/11/19(木) 20:50:41>>28 これ前スレにあった気が 0030デフォルトの名無しさん2009/11/19(木) 22:17:36 1. 引数nを与えると,nが素数の時はTrueを,素数でないときはFalseを返す関数 prime(n) を定義せよ. 2. 関数 prime(n) を使用して,1000以下の素数をすべて表示するプログラムを書け.見つかった個数も表示すること.
バージョンは2.5と2.6で動くものをお願いします。 0035デフォルトの名無しさん2009/11/20(金) 02:05:19 def split_list(seq, m='@'): r = [] t = [] for i in seq: if t and i.startswith(m): r.append(t) t = [] t.append(i) if t: r.append(t) return r