输出负数求助,已经确定素数筛没错
查看原帖
输出负数求助,已经确定素数筛没错
800499
suzhikz楼主2024/9/22 21:38
#include<bits/stdc++.h>
#define ll long long
#define reg register
#define db double
#define il inline
using namespace std;
int n,m; 
int mu[10000005],prime[10000005],tot;
bool vis[10000005]; 
ll pre[100000005];
const int mod=20101009; 
int main(){
	mu[1]=1;
	cin>>n>>m;
	if(n>m)swap(n,m);
	for(int i=2;i<=m;i++){
		if(!vis[i]){
			prime[++tot]=i;
			mu[i]=-1;
		}
		for(int j=1;j<=tot&&prime[j]*i<=m;j++){
			if(i%prime[j]==0){
				vis[prime[j]*i]=1;
				mu[prime[j]*i]=0;
			}else{
				vis[prime[j]*i]=1;
				mu[prime[j]*i]=-mu[i];
			}
		}
	}
	for(int i=1;i<=n;i++){
		pre[i]=mu[i]*i*i%mod;
		pre[i]+=pre[i-1];pre[i]%=mod;
	}
	ll ans=0;
	for(ll d=1;d<=n;d++){
		for(ll k=1;k<=n/d;k++){
			ll i=n/(d*k),j=m/(d*k);
			int r=min(n/i,m/j);
			ans+=d*(pre[r]-pre[k-1])*(i+1)*i/2%mod*j*(j+1)/2%mod;
			k=r;
		}
	}
	cout<<ans;
	return 0;
}

2024/9/22 21:38
加载中...