lightoj 1375
題目大意:
求小於
思路:
…
即可求
又已知小於
即:
取模
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cstdlib>
#define N 3000001
#define LL unsigned long long
using namespace std;
int euler[N];
LL f[N], a[N];
void init_Euler()
{
euler[1] = 1;
for (int i = 2; i < N; i++)
{
euler[i] = i;
}
for (int i = 2; i < N; i++)
{
if (euler[i] == i)
{
for (int j = i; j < N; j += i)
{
euler[j] = euler[j] / i * (i - 1);
}
}
}
memset(a, 0, sizeof(a));
memset(f, 0, sizeof(f));
for(int i = 2; i < N; i++)
{
for(int j = i; j < N; j += i)
{
f[j] += ((LL)euler[i]) * i / 2 * j;
}
a[i] = a[i - 1] + f[i];
}
}
int main()
{
init_Euler();
int T;
scanf("%d", &T);
for (int cas = 1; cas <= T; cas++)
{
int n;
scanf("%d", &n);
printf("Case %d: %llu\n", cas, a[n]);
}
return 0;
}