View Code of Problem 3703

#include <iostream>
#include <cstdio>
#include <cstring>

using namespace std;

const int MAXN = 5e5 + 20;

long long mod = 1 << 32;

long long val[MAXN], dp[MAXN];

void cal(int n)
{
    for(long long i = 1; i < n; i++)
    {
        for(long long j = i;j < n; j += i)
            val[j] += (j/i +1) * (j/i) / 2;
    }
}

void init()
{
    memset(val, 0,sizeof val);
    cal(MAXN);
    dp[1] = 1;
    for(long long i = 2; i < MAXN; i++)
    {
        dp[i] = dp[i-1] + val[i] * i;
        dp[i] %= mod;
    }
}

int main()
{
    init();
    int cas = 1;
    int T;
    scanf("%d", &T);
    while(T--)
    {
        int n;
        scanf("%d", &n);
        printf("Case #%d: %lld\n", cas++, dp[n]);
    }
    return 0;
}

Double click to view unformatted code.


Back to problem 3703