[数论] ACM 2015 Changchun B Count a*b

题意:


题解:



#include<cstdio>
#include<cstring>
#include<algorithm>
#include<set>
#include<map>
#include<vector>
#define rep(i,j,k) for(int i=(int)j;i<=(int)k;i++)
#define per(i,j,k) for(int i=(int)j;i>=(int)k;i--)
using namespace std;
typedef long long LL;
typedef double db;
int n,P;
inline int S1(int x){
	return (x*1ll*(x+1)/2)%P;
}
inline int S2(int x){
	int x1=x;
	int x2=x+1;
	int x3=2*x+1;
	if(x1%2==0)x1/=2;else x2/=2;
	if(x1%3==0)x1/=3;
	else if(x2%3==0)x2/=3;
	else x3/=3;
	return (x1*1ll*x2%P)*1ll*x3%P;
}
void Main(){
	int ans=0;
	int ans2=0;
	int pre1,pre2;
	pre1=pre2=0;
	for(int i=1;i<=n;i++){
		int j=n/(n/i);
		int ss2=S2(j);
		int ss1=S1(j);
		ans2=(ans2+(ss2+P-pre2)*1ll*(n/i))%P;
		ans=(ans+S1(n/i)*1ll*(ss1+P-pre1))%P;
		pre1=ss1;
		pre2=ss2;
		i=j;
	}
	printf("%d\n",(ans2+P-ans)%P);
}
int main(){
	freopen("phy.in","r",stdin);
	freopen("phy.out","w",stdout);
	int T;scanf("%d",&T);
	while(T--){
		scanf("%d%d",&n,&P);
		Main();
	}
	return 0;
}


发布了975 篇原创文章 · 获赞 67 · 访问量 55万+
展开阅读全文

没有更多推荐了,返回首页

©️2019 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客

分享到微信朋友圈

×

扫一扫,手机浏览