求助,未知的问题!!!!30分谢谢
查看原帖
求助,未知的问题!!!!30分谢谢
544446
Demon_master楼主2022/8/4 19:03
// #pragma GCC optimize(2)
#include<bits/stdc++.h>
#define ll __int128
using namespace std;
const ll maxn =2e6+5;
inline ll read_int(){
    ll a=0,f=0,g=getchar();
    while(g<'0'||g>'9'){if(g=='-') f=1;g=getchar();}
    while('0'<=g&&g<='9') a=(a << 3) + (a << 1) + (g ^ 48),g=getchar();
    return f ? -a : a;
}
inline void write(ll s,bool f=1){
    ll top=0,a[40];
    if(s<0) s=-s,putchar('-');
    while(s) a[++top]=s%10,s/=10;
    if(top==0) a[++top]=0;
    while(top) putchar(a[top]+'0'),top--;
    if(f) putchar('\n');
}


ll n,m,ans;
ll mod=19940417;
ll inv2,inv6;
inline void exgcd(ll a,ll b,ll &x,ll &y){
    if(b==0){
        x=1,y=0;
        return;
    }
    exgcd(b,a%b,y,x);
    y-=a/b*x;
}

inline ll get1(ll l,ll r){return (l+r)*(r-l+1)%mod*inv2%mod;}

inline ll get2(ll n){
    ll ans=n*n%mod;
    for(ll i=1,go;i<=n;i=go+1){
        go=n/(n/i);
        ans=ans-get1(i,go)*(n/i)%mod;
        ans=(ans%mod+mod)%mod;
    }
    return ans;
}

inline ll get3(int l,int r){return ((r*(r+1)%mod*(2*r+1)%mod*inv6%mod-(l-1)*(l-1+1)%mod*(2*(l-1)+1)%mod*inv6%mod)%mod+mod)%mod;}

inline void read(){
    ll y;
    exgcd(6,mod,inv6,y);
    exgcd(2,mod,inv2,y);
    n=read_int(),m=read_int();
    if(n>=m) swap(n,m);
    ll ans1=get2(n)*get2(m)%mod;
    ll ans2=n*m%mod*n%mod;
    for(ll i=1,go;i<=n;i=go+1){
        go=min(n/(n/i),m/(m/i));
        ans2=((ans2-(get1(i,go)*((((n/i)*m)+((m/i)*n))%mod))%mod)%mod+mod)%mod;
        ans2=(ans2+(get3(i,go)%mod*(n/i)%mod*(m/i)%mod))%mod;
    }
    ans=ans1-ans2;
    ans=(ans%mod+mod)%mod;
    write(ans);
}

int main (){
    freopen(".in","r",stdin);
    read();
    // while(1) getchar();
}

2022/8/4 19:03
加载中...