1. 程式人生 > >2018.10.06【NOIP普及組】模擬賽C組

2018.10.06【NOIP普及組】模擬賽C組

T1 YY

  • 題目描述

      最近小h接到命令,要再出一份題目,於是小h馬上陷入了沉思之中,想到了yy曾經出過的一道題目:給出一個超大正整數S,S的位數小於500000,然後找出一個數 n, 使得n為正整數,且N^N=S。輸出 這個數N.
    
  • 樣例輸入

    387420489

  • 樣例輸出

    9

  • 資料範圍限制

    然而並沒有

思路

  1. 首先我們可以看出,n的n次方是很大的,這是不難的。
  2. 所以很顯然無腦的計算是不行的,這也是不難的。
  • 低分做法

首先,在沒有任何規律性的東西之前,我們應當不斷模擬探究事物的本質,鑽研生命的奧義,從而獲得世間的真理。只有這樣我們才能步步前進,故先用暴力。雖然說是暴力,但是是很溫柔的,我們只是列舉每一個n就能成功,請大家不要對此題或鍵盤滑鼠施暴。

  • 時間複雜度

10500003\sqrt[3]{10^{50000}}

  • 中等做法

依題意得,n無後效性,故可用二分大法。此時可以提高很多效率。但是依然不是最優方案。卻也比前一個暴力方法好多。(楊柳小姐:一看就似農閩,目光duen淺)

  • 時間複雜度

log2(1050000)3\sqrt[3]{log_2(10^{50000})}

  • 高等等做法

首先寫個公式

當 X >= 10

xxx^x

(x+1)x+1(x + 1) ^ {x+ 1}

不難發現前者比後者位數少

  • 時間複雜度

log2(1050000))3\sqrt[3]{log_2(10^{50000}))}