50pts求助,可能是取模的问题, 不会改了。。。。
查看原帖
50pts求助,可能是取模的问题, 不会改了。。。。
265453
strange757楼主2022/5/22 11:16
#include<iostream>
#include<cstdio>
#include<cstring>
#define int long long
using namespace std;
const int mod = 19940417;
int n, m, x, ans, ans1, y, ans2,inv2=9970209,inv6=3323403;
signed main(){
    scanf("%lld%lld", &n, &m);
    int l = 1, r = 0;
    while(l <= m){
        r = m / (m / l);
        x += ((r - l + 1) % mod* (m / l)%mod *  (l + r)%mod*inv2%mod + mod) % mod;
        x %= mod;
        l = r + 1;
    }
    l = 1, r = 0;
    while(l <= n){
      r = n / (n / l);
      ans1 += ((r - l + 1) %mod * (n / l)%mod *(l + r)%mod *inv2%mod + mod) % mod;
      ans1 %= mod;
      l = r + 1;
    } 
    l = 1, r = 0, y = 0;
    while(l <= min(n, m)){
        r = min(m / (m / l), n);
        y += ((r - l + 1)%mod * (m / l)%mod * (l + r)%mod * inv2%mod + mod) % mod;
        y %= mod;
        l = r + 1;
    }
    l = 1, r = 0;
    while(l <= min(n, m)){
        r = min(n / (n / l), m / (m / l));
        int x1 = ((n / l) * (m / l) % mod + mod) % mod;
        int x2 = (r%mod * (r + 1)% mod * (2 * r%mod + 1)% mod * inv6 % mod + mod) % mod;
        int x3 = ((l - 1)%mod * (l) % mod *(2 *(l - 1)%mod + 1)% mod * inv6% mod + mod) % mod;
        x2 = ((x2 -x3)% mod + mod)%mod;
        ans2 = (ans2 + x1*x2%mod + mod) % mod;
        ans2 %= mod;
        l = r + 1;
    }
    ans = ((m * m%mod - x + mod)% mod * (n * n%mod - ans1 + mod) % mod - ((n %mod* n % mod * m % mod- m %mod * ans1% mod - n%mod * y % mod+ ans2% mod)%mod + mod) % mod);
    ans = (ans%mod + mod)% mod;
    printf("%lld", ans);
    return 0;
}

目前我已经尽我所能去取模了,但还是只有50pts

2022/5/22 11:16
加载中...