#include <iostream>
#include <vector>
#include <cmath>
using namespace std;
typedef long long ll;
const int N = 1e6 + 10;
const int mod = 666623333;
vector<int> v[N];
bool flag[N];
int pri[N];
int dp(int x)//筛质数
{
int cnt = 0;
for (int i = 2;i <= x;i++)
{
if (!flag[i])
{
pri[++cnt] = i;
for (int j = 2 * i;j <= x;j += i)
{
flag[j] = true;
}
}
}
return cnt;
}
int main()
{
ll l,r;
cin >> l >> r;
int cnt = dp(1000000);//筛出1~1000000的所有质数
//l~r在1~1000000的所有质因数
for (int i = 1;i <= cnt;i++)
{
for (int j = ((l - 1) / pri[i] + 1) * pri[i];j <= r;j += pri[i])
{
v[j - l].push_back(pri[i]);
}
}
ll ans = 0;
//遍历,算欧拉函数
for (ll i = l;i <= r;i++)
{
ll tmp = i;
ll phi = i;
for (int j = 0,len = v[i - l].size();j < len;j++)
{
phi = phi / v[i - l][j] * (v[i - l][j] - 1);
while (tmp % v[i - l][j] == 0) tmp /= v[i - l][j];
}
if (tmp > 1) phi = phi / tmp * (tmp - 1);
ans = (ans + phi % mod) % mod;
}
cout << ans << endl;
return 0;
}
并且,我下载了第一个数据,在洛谷在线 IDE 上输出的是 23816(正确答案),但是评测显示 read 3,excepted 2