解方程

解方程

https://ac.nowcoder.com/acm/contest/7329/F

解方程

图片说明

/*
  Author : lifehappy
*/
#include <bits/stdc++.h>

using namespace std;

typedef long long ll;

const int N = 1e7 + 10, mod = 998244353;

ll prime[N], minnp[N], f[N], cnt, p, q, n;

bool st[N];

ll quick_pow(ll a, int n) {
    ll ans = 1;
    while(n) {
        if(n & 1) ans = ans * a % mod;
        a = a * a % mod;
        n >>= 1;
    }
    return ans;
}

void init() {
    f[1] = 1;
    for(int i = 2; i < N; i++) {
        if(!st[i]) {
            prime[++cnt] = i;
            f[i] = (quick_pow(i, q) - quick_pow(i, p) + mod) % mod;
            minnp[i] = 1;
        }
        for(int j = 1; j <= cnt && 1ll * i * prime[j] < N; j++) {
            st[i * prime[j]] = 1;
            if(i % prime[j] == 0) {
                minnp[i * prime[j]] = minnp[i] + 1;
                f[i * prime[j]] = f[i / quick_pow(prime[j], minnp[i])] * (quick_pow(prime[j], q * (minnp[i * prime[j]])) - quick_pow(prime[j], p + minnp[i] * q) + mod) % mod;
                break;
            }
            minnp[i * prime[j]] = 1;
            f[i * prime[j]] = f[i] * f[prime[j]] % mod;
        }
    }
}

int main() {
    // freopen("in.txt", "r", stdin);
    // freopen("out.txt", "w", stdout);
    // ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
    cin >> n >> p >> q;
    init();
    ll ans = 0;
    for(int i = 1; i <= n; i++) {
        ans ^= f[i];
    }
    cout << ans << "\n";
    return 0;
}
全部评论

相关推荐

喜欢吃蛋糕仰泳鲈鱼是我的神:字节可以找个hr 给你挂了,再放池子捞
点赞 评论 收藏
分享
11-14 16:13
已编辑
重庆科技大学 测试工程师
Amazarashi66:不进帖子我都知道🐮❤️网什么含金量
点赞 评论 收藏
分享
评论
4
收藏
分享
牛客网
牛客企业服务