zoukankan      html  css  js  c++  java
  • ! P3768简单的数学题

    (ans=(sum_{i=1}^nsum_{j=1}^nijgcd(i,j))\%p)

    预处理(n^{frac 2 3})后,时间复杂度为(O(n^{frac23}))

    #include<bits/stdc++.h>
    using namespace std;
    #define int long long 
    inline int read(){
    	int x=0,f=1;char c=getchar();
    	while(!isdigit(c)){if(c=='-')f=-1;c=getchar();}
    	while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();}
    	return f==1?x:-x;
    }
    const int N=5e6+4;
    int mod,tot,inv6,ans,s[N],pri[N];
    bitset<N>b;
    unordered_map<int,int>ms;
    inline int ksm(int x,int r){
    	int ret=1;
    	for(int i=0;(1ll<<i)<=r;i++){
    		if((r>>i)&1)ret=ret*x%mod;
    		x=x*x%mod;
    	}
    	return ret;
    }
    inline void pre(int n){
    	s[1]=1;
    	for(int i=2;i<=n;i++){
    		if(!b[i]){pri[++tot]=i;s[i]=i-1;}
    		for(int j=1;j<=tot&&pri[j]*i<=n;j++){
    			b[i*pri[j]]=1;
    			if(i%pri[j])s[i*pri[j]]=s[i]*(pri[j]-1)%mod;
    			else{
    				s[i*pri[j]]=s[i]*pri[j]%mod;
    				break;
    			}
    		}
    	}
    	for(int i=2;i<=n;i++)s[i]=(s[i-1]+s[i]*i%mod*i)%mod;
    }
    inline int sum(int x){
    	x%=mod;
    	return x*(x+1)/2%mod;
    }
    inline int sum2(int x){
    	x%=mod;
    	return x*(x+1)%mod*(x*2+1)%mod*inv6%mod;
    }
    inline int S(int n){
    	if(n<N)return s[n];
    	if(ms[n])return ms[n];
    	int ret=sum(n)*sum(n)%mod;
    	for(int l=2,r,x;l<=n;l=r+1){
    		r=n/(n/l);
    		x=sum2(r)-sum2(l-1);
    		ret=(ret-x*S(n/l))%mod;
    	}
    	ms[n]=ret;
    	return ret;
    }
    signed main(){
    	mod=read();int n=read();
    	pre(N-1);
    	inv6=ksm(6,mod-2);
    	for(int l=1,r,pr=0,nw;l<=n;l=r+1){
    		r=n/(n/l);
    		nw=S(r);
    		ans=(ans+sum(n/l)*sum(n/l)%mod*(nw-pr))%mod;
    		pr=nw;
    	}
    	cout<<(ans+mod)%mod;
    	return (0-0);
    }
    
  • 相关阅读:
    Documents
    gitlab 安装和配置
    git相关知识
    马俊龙ansible教程分享
    源码安装python 报错,openssl: error while loading shared libraries: libssl.so.1.1
    jumpserver 常见错误解决
    nginx 定义:响应头和请求头
    gcc入门(下)
    gcc入门(上)
    awk命令
  • 原文地址:https://www.cnblogs.com/aurora2004/p/12662826.html
Copyright © 2011-2022 走看看