題目描述
設 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樣例2:484 484
樣例3:1 58
樣例4:58 484
樣例5:1000000000 1000000000
輸出樣例#1:
樣例1:1樣例2:0
樣例3:12
樣例4:24
樣例5:1
1 <= l <= r <= 10^9
一看這道題 我就覺得是 道 數論題 然後 打表找規律 規律沒找出來 然後想分塊打表 最後寫炸了
居然是數論題~~~~~~~~~
//感謝來自二區 鄉勇 的 題解
#include#include
using
namespace
std;
intl,r,ans;
int s[20010
],n;
void find(int x,int y,int
z)
if(y*y==b) s[++n]=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 現在,給出乙個區間 l,...
數論 洛谷 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...