尤拉計劃749:近似冪和
一個正整數n,其10進製表達的每位的正整數k次方的和,如果等於n-1或n+1,稱為近似冪和。比如,35是近似冪和,因為3^2 + 5^2 =34。
設s(n)為小於或等於n位的近似冪和的總和。
已知s(2)=100,s(6)=2562701。
求s(16)
測試程式
import time
def c(n):
s=0
for i in range(1,10**n):
for j in range(2,20):
s2=0
for k in range(0,n):
s2+=(i//(10**k)%10)**j
if s2-i in [-1,1]:
s+=i
print(i,j,s2)
return s
t=time.time();print(c(6));print(time.time()-t)
>>>> t=time.time();print(c(6));print(time.time()-t)
35 2 34
75 2 74
528757 6 528756
629643 6 629642
688722 6 688721
715469 6 715468
2562701
32.401257038116455
把各位的冪先加起來,然後看結果又沒有落在範圍內的
import itertools as it
def c2(n):
s=0
for d in range(2,n+1): #位數
for k in range(2,20): #次方
for i in it.combinations_with_replacement(range(0,10),d):
if i[0]==0:continue
#print(i)
s2=0
ls1=[str(ii) for ii in i];ls1.sort()
for j in i:
s2+=j**k
if s2>10**d:break
if s2<10**(d-1) or s2>10**d:continue
ls2=list(str(s2-1));ls2.sort()
ls3=list(str(s2+1));ls3.sort()
if ls1==ls2 or ls1==ls3:
if ls1==ls2:s2-=1
else:s2+=1
s+=s2
print(i,k,s2)
return s
>>>> t=time.time();print(c2(6));print(time.time()-t)
(3, 5) 2 35
(5, 7) 2 75
(1, 4, 5, 6, 7, 9) 6 715469
(2, 2, 6, 7, 8, 8) 6 688722
(2, 3, 4, 6, 6, 9) 6 629643
(2, 5, 5, 7, 7, 8) 6 528757
2562701
0.12479996681213379
相關文章
- 尤拉計劃686:2的冪
- 尤拉計劃721:無理數高次冪
- 尤拉計劃700:尤拉幣
- 尤拉計劃739:和的和
- 尤拉降冪
- 尤拉計劃745:平方和
- 尤拉計劃622:洗牌
- 尤拉計劃698:123數
- 尤拉計劃696:麻將
- 尤拉計劃719:拆分數
- 尤拉計劃699:三腳數
- 尤拉計劃706:三象數
- 尤拉計劃718:不可達數
- 尤拉計劃715:六元組
- 尤拉計劃709:偶數袋
- 尤拉計劃708:你只要2
- 尤拉計劃712:指數差
- 尤拉計劃751:串聯重合
- 尤拉計劃717:取模公式之和公式
- 尤拉計劃722:慢收斂系列
- 尤拉計劃695:隨機長方形隨機
- 尤拉計劃694:立方滿因數
- 尤拉計劃725:數位之和數
- 尤拉計劃710:1百萬會員
- 尤拉計劃723:畢達哥拉斯四邊形
- 尤拉計劃697:隨機衰減序列隨機
- 尤拉計劃713:圖蘭熱水系統
- 尤拉計劃711:二進位制黑板
- 尤拉計劃748:倒丟蕃多方程
- 尤拉計劃747:三角披薩
- 尤拉計劃657:不完整的單詞
- 尤拉計劃701:隨機連線區域隨機
- 尤拉計劃714:兩種數位的數
- 尤拉計劃658:不完整的單詞(2)
- 尤拉計劃735:2n^2的因數
- 尤拉計劃705:除數序列的逆轉次數
- 信奧日記——數論(快速冪、埃氏篩、尤拉篩)
- 尤拉計劃621:把整數表示為三角數之和