BZOJ 2956 Number Theory

https://www.lydsy.com/JudgeOnline/problem.php?id=2956

Not so easy

Number Theory Block

As for how to block

I don't want to say there

Today I'm tired

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const ll M=19940417;
ll inv6=3323403;
ll quickmod(ll a,ll b,ll m){
    ll ans=1;
    while(b){
        if(b&1)ans=(ans*a)%m;
        b>>=1;
        a=a*a%m;
    }
    return ans;
}

ll inv(ll a,ll p){
    return quickmod(a, p-2, p);
}
ll solve(ll x){
    ll ans=x*x;
    ll a=1;
    while(a<=x){
        ll b=x/(x/a);
        ans-=(x/a)*(a+b)*(b-a+1)/2;
        a=b+1;
    }
    return ans%M;
}
ll sum2(ll x){
    return x*(x+1)%M*(2*x+1)%M*inv6%M;
}
ll C(ll x,ll y){
    --x;
    return (sum2(y)-sum2(x)+M)%M;
}
int main(){
    ll n,m;
    cin>>n>>m;
    ll ans=solve(n)*solve(m)%M;
    ll x=min(n,m);
    ll a=1;
    ll ans2=0;
    while(a<=x){
        ll b=min(n/(n/a),m/(m/a));
        ll c=n/a;
        ll d=m/a;
        ans2=(ans2+n*m%M*(b-a+1)%M+C(a,b)%M*c*d%M-(m*c+n*d)%M*(((a+b)*(b-a+1)/2)%M)%M+M)%M;
        a=b+1;
    }
    cout<<(ans-ans2+M)%M<<endl;
}

Code of AC:
 

猜你喜欢

转载自blog.csdn.net/gipsy_danger/article/details/80543562