今年一番冬らしかった月曜日

昨日も寝る前にプログラミングコンテストの問題を1問解いてから寝ました。

atcoder.jp

基本的には総当たりするだけでいいんですが、最大値が10^10なのでほんとうに全部総当たりすると時間が足りなくなってしまいます。この問題では総当たりする数を減らす工夫をすることで制限時間内に解けるようになります。

※ ソースは最後に載せておきます

これの前の問題はめっちゃ苦労したのにこの問題はかなり楽に解けました。徐々に難しくなるわけじゃないんだな。

とプログラミングをしていたからというわけではないのですが、昨日はなかなか眠れませんでした。
「さすがに朝は起きられないかな...」と心配したのですがあまりに寒すぎて朝は普段どおり目が覚めましたw

朝6時の時点で氷点下6度ってどういうこと...。あまりに冬らしすぎます。

そんな寒さの中を歩いて出勤しました。めちゃくちゃ寒かったけど、路面が凍っていたからなのか自転車の高校生があまりいなくてその点はとても快適でした。

誰も歩いていない歩道橋の近くはめちゃくちゃ雪が残ってるしやたらと滑るし最悪でした。

そして日中に買い物に出たときは日差しもあってわりと暖かかったので帰りは暖かいだろうと期待していたのですが、いざ帰ろうと外に出たらめちゃくちゃ寒かったです。帰りがけに本屋に寄って帰ろうと思っていたのですが、寒すぎてまっすぎ帰ってきました。本屋による気力もなかった...。

今日こそ早く寝たいので難しい本を読んで眠気を誘発します。


namespace _17_Unexpressed {
    internal class Program {
        /// <summary>
        /// C - Unexpressed
        /// </summary>
        /// <remarks>https://atcoder.jp/contests/abc193/tasks/abc193_c</remarks>
        static void Main() {
            var n = Convert.ToInt64(Console.ReadLine());

            var countOfNumbers = new Dictionary<long, bool>();
            for (var i = 2; i <= 100000; i++) {
                if (i > n) break;
                for (var j = 2; j <= 34; j++) {
                    long v = (long)Math.Pow(i, j);
                    if (v > n) break;
                    if (!countOfNumbers.ContainsKey(v)) countOfNumbers.Add(v, true);
                }
            }
            Console.WriteLine($"{n - countOfNumbers.Count}");
        }
    }
}