尤拉計劃699:三腳數
Triffle Numbers
Problem 699 Let σ(n) be the sum of all the divisors of the positive integer n, for example: σ(10)=1+2+5+10=18.
Define T(N) to be the sum of all numbers n≤N such that when the fraction σ(n)/n is written in its lowest form a/b, the denominator is a power of 3 i.e. b=3^k,k>0.
You are given T(100)=270 and T(10^6)=26089287.
Find T(10^14)
測試程式
def sieve(n):
primes=[]
h = [True] * int(n**0.5+1)
h[:2] = [False, False]
for i in range(2, int(n ** 0.25) + 1):
if h[i]:
h[i*i::i] = [False] * len(h[i*i::i])
for i, e in enumerate(h):
if e:
primes.append(i)
return primes
def gcd(a,b):
if a<b: a,b=b,a
while(b>0):a,b=b,a%b
return a
import math
def divs(n):
d=[]
c=0
st=math.sqrt(n)
for i in p:
if i>st:break
while n % i ==0: n//=i;c+=1 #;print(i,c);
else:
if(c>0):d.append([i,c]);c=0
if n>st: d.append([n,1])
return d
import itertools
def tdiv(n):
t=divs(n)
s=0
z=[[i[0]**j for j in range(i[1]+1)] for i in t]
#[[for i in range(len(item)]for item in itertools.product(*z)]
s=0
for item in itertools.product(*z):
s1=1
for i in item: s1*=i
s+=s1
return s
def three(n):
if n==1:return 0
while n%3==0:n//=3
return n
n=10**6
p=sieve(n)
def t(n):
s=0
for i in range(3,n+1,3):
deno=i/gcd(tdiv(i),i)
#if 3**int(math.log(deno,3))==deno:s+=i
if three(deno)==1:s+=i #;print(i,s)
return s
>>> t(10**6)
26089287
相關文章
- 尤拉計劃706:三象數
- 尤拉計劃698:123數
- 尤拉計劃719:拆分數
- 尤拉計劃700:尤拉幣
- 尤拉計劃725:數位之和數
- 尤拉計劃718:不可達數
- 尤拉計劃709:偶數袋
- 尤拉計劃712:指數差
- 尤拉計劃694:立方滿因數
- 尤拉計劃621:把整數表示為三角數之和
- 尤拉計劃747:三角披薩
- 尤拉計劃714:兩種數位的數
- 尤拉計劃622:洗牌
- 尤拉計劃696:麻將
- 尤拉計劃721:無理數高次冪
- 尤拉計劃705:除數序列的逆轉次數
- 尤拉計劃735:2n^2的因數
- 尤拉計劃686:2的冪
- 尤拉計劃715:六元組
- 尤拉計劃708:你只要2
- 尤拉計劃749:近似冪和
- 尤拉計劃739:和的和
- 尤拉計劃751:串聯重合
- 尤拉計劃745:平方和
- 尤拉計劃717:取模公式之和公式
- 尤拉計劃722:慢收斂系列
- 尤拉計劃695:隨機長方形隨機
- 尤拉計劃710:1百萬會員
- 尤拉計劃704:二項式係數中的2因數
- 尤拉計劃723:畢達哥拉斯四邊形
- 尤拉計劃697:隨機衰減序列隨機
- 尤拉計劃713:圖蘭熱水系統
- 尤拉計劃711:二進位制黑板
- 尤拉計劃748:倒丟蕃多方程
- 尤拉計劃657:不完整的單詞
- 尤拉計劃701:隨機連線區域隨機
- 尤拉計劃658:不完整的單詞(2)
- 尤拉篩線性篩質數