nyoj 458 小光棍數

2021-06-20 08:12:38 字數 1011 閱讀 8933

時間限制:

1000 ms  |  記憶體限制:

65535 kb

難度:1 描述

最近topcoder的xd遇到了乙個難題,倘若乙個數的三次方的後三位是111,他把這樣的數稱為小光棍數。他已經知道了第乙個小光棍數是471,471的三次方是104487111,現在他想知道第m(m<=10000000000)個小光棍數是多少?

輸入有多組測試資料。第一行乙個整數n,表示有n組測試資料。接下來的每行有乙個整數m。

輸出輸出第m個小光棍數。

樣例輸入

1

1

樣例輸出

471

思路:第乙個是471.

後三位是111,只能n的末尾為471;

證明:假設之後的數為m,有m=k+471;

m^3=(k^3+k(3*471^2)+k^2(3*471)+471^3);

其中471^3為***111.

則必有k^3+k(3*471^2)+k^2(3*471)=1000*p;

合併即為k*(k^2+3*471^2+k*3*471)=1000p

1.若k能被1000整除,滿足題意

2.若k不能被1000整除,則k^2+3*471^2+k*3*471能被1000整除,假設k=t+x,其中t能被1000整除,x不能被1000整除,帶入根據整除關係可化簡為

x^2+3*471x+3*471^2能被1000整除,因為3*471^2=665523,可知x^2+3*471x的結果中末尾為477(k+477    k能被1000整除)才能滿足題意。

假設結果為p+477,即可化簡為:x^2+(157x-53)*9=k;

把x分個位數是0~9討論,結果均得不出為0,即k不能被1000整除。矛盾而否定了假設2.

於是k能被1000整除。所以第乙個數字471,以後的數為1000*i+471;

#includeint main()

return 0;

}

NYOJ 458 小光棍數

描述 最近topcoder的xd遇到了乙個難題,倘若乙個數的三次方的後三位是111,他把這樣的數稱為小光棍數。他已經知道了第乙個小光棍數是471,471的三次方是104487111,現在他想知道第m m 10000000000 個小光棍數是多少?輸入有多組測試資料。第一行乙個整數n,表示有n組測試資...

nyoj 458 小光棍數

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 最近topcoder的xd遇到了乙個難題,倘若乙個數的三次方的後三位是111,他把這樣的數稱為小光棍數。他已經知道了第乙個小光棍數是471,471的三次方是104487111,現在他想知道第m m 10000000000 個小光...

nyoj 458 小光棍數

時間限制 1000 ms 記憶體限制 65535 kb 難度 1 描述 最近topcoder的xd遇到了乙個難題,倘若乙個數的三次方的後三位是111,他把這樣的數稱為小光棍數。他已經知道了第乙個小光棍數是471,471的三次方是104487111,現在他想知道第m m 10000000000 個小光...