競プロをしながら、節約と株式投資でセミリタイアを目指す東大卒のブログ

東大卒でメーカー勤務の私がセミリタイアするために投資や競プロを頑張っていこうという趣旨で始めたブログです。独身男性です。お金の大切さや今後の生き方も併せて伝えられたらと思います。

ABC172で書いたコード

using System;
using System.Numerics;
using System.Linq;
using System.Collections.Generic;
using System.Text;
using System.Collections;

namespace debug
{
    class main
    {
        static void Main(string args)
        {
            //問題クラスを展開
            ProgramD a = new ProgramD();
            a.main();//実行する

        }

    }
    //ABC170
    class ProgramA
    {
        public void main()
        {
            //入力
            int a = int.Parse(Console.ReadLine());

            //a+a*a+a*a*aで答えを出す
            Console.WriteLine(a + a*a + a*a*a);

        }
    }

    class ProgramB
    {
        public void main()
        {
            //入力
            string s = Console.ReadLine();
            string t = Console.ReadLine();

            int count = 0;

            //頭から文字を見て一致しないところを足す
            for (int i = 0i < s.Lengthi++)
            {
                if (s[i] != t[i])
                    count++;
            }

            //答え出力
            Console.WriteLine(count);


        }
    }

    class ProgramC
    {
        public void main()
        {

            //入力
            string s = Console.ReadLine().Split(' ');
            long n = long.Parse(s[0]);
            long m = long.Parse(s[1]);
            long k = long.Parse(s[2]);

            long one = new long[n + 1];
            long two = new long[m + 1];
            string s1 = Console.ReadLine().Split(' ');
            string s2 = Console.ReadLine().Split(' ');


            //頭からi冊目を読んでかかる時間に変換
            for (int i = 0i < ni++)
            {
                if (i == 0)
                    one[i + 1] = long.Parse(s1[i]);
                else
                    one[i + 1] = one[i] + long.Parse(s1[i]);
            }

            //頭からi冊目を読んでかかる時間に変換
            for (int i = 0i < mi++)
            {
                if (i == 0)
                    two[i + 1] = long.Parse(s2[i]);
                else
                    two[i + 1] = two[i] + long.Parse(s2[i]);
            }

            long ans = 0;
            //N冊あるタワーで読む冊数を決めたとき、M冊あるタワーで何冊読むか二分探索で決める
            for(int i = 0;i <= n;i++)
            {
                long time = k - one[i];//M冊タワーの読める時間を設定

                //すでにマイナスならあり得ないので飛ばす
                if (time < 0)
                    continue;

                long min = -1;
                long max = m + 1;

                //二分探索
                while (min + 1 != max)
                {
                    long t = (min + max) / 2;
                    if (two[t] <= time)
                        min = t;
                    else
                        max = t;
                }

                //最大を更新
                ans = Math.Max(i + minans);

            }

            //答え出力
            Console.WriteLine(ans);

        }
    }

    class ProgramD
    {
        public void main()
        {

            //入力
            long n = long.Parse(Console.ReadLine());

            long ans = 0;
            //iからNを超えないiの倍数の公差iの公差数列の和を求めて、足す。
            for (int i = 1i <= ni++)
            {
                long count = n / i;
                ans += (i + count * i) * count / 2;

            }

            //答え出力
            Console.WriteLine(ans);

           
        }
    }
}