50pts求条,AC变猫娘
  • 板块P1001 A+B Problem
  • 楼主nzlys04
  • 当前回复12
  • 已保存回复12
  • 发布时间2025/7/23 16:45
  • 上次更新2025/7/23 20:54:16
查看原帖
50pts求条,AC变猫娘
1275819
nzlys04楼主2025/7/23 16:45
#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N=3e7+5;
int vis[N],_phi[N],pri[N],n,ans,cnt;
void init(){
	_phi[1]=1;
	for(int i=2;i<N;i++){
		if(!vis[i]){
			pri[++cnt]=i;
			_phi[i]=i-1;
		}
		for(int j=1;j<=cnt && i*pri[j]<N;j++){
			vis[i*pri[j]]=1;
			if(!(i%pri[j])){
				_phi[i*pri[j]]=_phi[i]*pri[j];
				break;
			} 
			_phi[i*pri[j]]=_phi[i]*_phi[pri[j]];
		}

	}
}
int a,b,res1,res2,flaga=1,flagb=1;
signed main(){
	init();
	cin>>a>>b;
	if(a<0) flaga=-1;
	if(b<0) flagb=-1;
	for(int d=1;d<=abs(a);d++) if(abs(a) % d==0) res1+=_phi[d];
	for(int d=1;d<=abs(b);d++) if(abs(b) % d==0) res2+=_phi[d];
	res1*=flaga,res2*=flagb;
	cout<<res1+res2;
}
2025/7/23 16:45
加载中...