設 s(n ) 表示 n 的各位數字之和,如 s(484) = 4+8+4 = 16, s(22) = 2+2 = 4。如果乙個正整數滿足 s(x*x) = s(x) *s(x),我們稱之為 rabbit n umber。比方說,22 就是乙個 rabbit n umber,因為 s(484) = s(22) *s(22)。
現在,給出乙個區間 [l, r],求在該區間內的 rabbit n umber 的個數。
輸入格式:
輸入僅一行,為空格隔開的兩個數 l 和 r。
輸出格式:
輸出僅一行乙個整數,表示所求 rabbit n umber 的個數。
輸入樣例#1:
樣例1:22 22輸出樣例#1:樣例2:484 484
樣例3:1 58
樣例4:58 484
樣例5:1000000000 1000000000
樣例1:11 <= l <= r <= 10^9樣例2:0
樣例3:12
樣例4:24
樣例5:1
屠龍寶刀點選就送
經過2.9g打表發現
rabbit number的各位數字一定<=3
#include #includeview code#include
#include
typedef
long
long
ll;using
namespace
std;
int maxn,l,r,l,d[200
],i,ans;
ll geth(ll f)
returnh;}
ll powe(ll a,ll b)
returnr;}
void
get(ll &x)
void
wamn()
ll m=powe(n,2
); ll x=geth(n),y=geth(m);
if(x*x==y) ans++;
d[1]++;
int k=1
;
while(d[k]>3
)
wamn();
}int
main()
wamn();
}
終究因為洛谷資料太弱 我的**才能過
放到codevs上大資料會蹦。。
終究因為我
void這段**每次遞迴都要讀一次 太浪費時間get(ll &x)
然後借鑑了同學做法,效率更高。 思想是一樣的
#include #includeview codeusing
namespace
std;
int an[25500
],maxn,l,r,l,cnt,i,ans;
void find(int x,int y,int
z)
if(y*y==b) an[++cnt]=x;
}if(z>r) return
;
for(int i=0;i<4;++i)
find(x*10+i,y+i,z*10);}
intmain()
洛谷 P1362 兔子數
題目描述 設 s n 表示 n 的各位數字之和,如 s 484 4 8 4 16,s 22 2 2 4。如果乙個正整數滿足 s x x s x s x 我們稱之為 rabbit n umber。比方說,22 就是乙個 rabbit n umber,因為 s 484 s 22 s 22 現在,給出乙個...
數論 洛谷 P1362 兔子數
我看到的時候一點頭緒都沒有汗 number 這題告訴你s a a s a s a 且a a 10 18 所以s a a 18 9 13 13 即s a 13 搜尋 適當剪枝即可 證明乙個定理 rabbit number的各位數字一定 3 若某數字x的一位,a 4 那麼它在該位的貢獻是a 2的 而在x...
LuoGu題解 P1362 兔子數
依題意模擬暴力打表找規律,注意到 符合題意的數中只包含 0,1,2,3 大於 3 的數,平方後都會進製,進製導致 s x s x 觀察資料範圍,最大滿足題意的數字有 10 位,那麼我們列舉每一位上的數字,然後暴力判斷是否為兔子數就行了。code include include include inc...