0分求助
  • 板块P3601 签到题
  • 楼主Abelxxyy
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/5/4 08:47
  • 上次更新2024/5/4 08:52:28
查看原帖
0分求助
1128877
Abelxxyy楼主2024/5/4 08:47
#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 上输出的是 2381623816(正确答案),但是评测显示 read 3,excepted 2

2024/5/4 08:47
加载中...