7529 - PJ - Sqrt(Big Integer)!   

Description

想必大家都知道,若N是一個完全平方數,則必定存在另一個數M使的
N = M*M.前幾個完全平方數為:1,4,9,16,25…

現在給你一個正整數A,想知道1~A之間(包含1和A)到底有多少個平方數呢?

這問題在A很小的時候,我們可以用prefix sum解決,我們可以先開一個大小為A的陣列,全部初始化為0,然後在完全平方數的地方擺上1,這時開始做prefix sum,就可以快速得到所有正整數<=A的答案了.
比如說 :
1 2 3 4 5 6 7 8 9 10 <-陣列編號
1 0 0 1 0 0 0 0 1 0 <-一開始只有完全平方數是1
1 1 1 2 2 2 2 2 3 3 <-做一次prefix sum
這時<=10的問題的答案我都可以O(1)直接輸出了!

但是,kerker又覺得這樣太快寫完的人會很無聊,所以!這邊的正整數A是大數!!!如果是大數的話你有更好的做法嗎??

Kerker給願意挑戰的人一個優惠,答案只需要第一個位數正確就可以了歐!比如說這組測資的答案是593個,那你只需要輸出500就可以了^.< (也就是第一個位數正確,其他位置為0)

Input

輸入有多組測資,每組測資一行.
每行包含一個正整數A.(1 <= A <= 10^1000)
當A=0時表示輸入結束.

Output

每組測資輸出一行,輸出1~A(包含)有多少完全平方數.
僅需最大位數正確即可!(但其他位數要為0!)

Sample Input  Download

Sample Output  Download

Tags




Discuss