只能过样例,10tps
  • 板块P2257 YY的GCD
  • 楼主qwq2519
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/9/5 21:11
  • 上次更新2023/11/4 07:36:48
查看原帖
只能过样例,10tps
141335
qwq2519楼主2021/9/5 21:11
#include<iostream>
#include<cstdio>
#define rep(i,j,k) for(register int i(j);i<=k;++i)
#define drp(i,j,k) for(register int i(j);i>=k;--i)
#define bug cout<<"~~~~~~~~"<<'\n';
#define bugout(x) cout<<x<<endl;
using namespace std;
typedef long long lxl;
template<typename T>
inline T  max(T &a, T &b) {
	return a > b ? a : b;
}
template<typename T>
inline T  min(T &a, T &b) {
	return a < b ? a : b;
}

inline char gt() {
	static char buf[1 << 21], *p1 = buf, *p2 = buf;
	return p1 == p2 && (p2 = (p1 = buf) + fread(buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;
}
template <typename T>
inline void  read(T &x) {
	register char ch = gt();
	x = 0;
	int w(0);
	while(!(ch >= '0' && ch <= '9'))w |= ch == '-', ch = gt();
	while(ch >= '0' && ch <= '9')x = x * 10 + (ch & 15), ch = gt();
	w ? x = ~(x - 1) : x;
}
template <typename T>
inline void out(T x) {
	if(x < 0) x = -x, putchar('-');
	char ch[20];
	int num(0);
	while(x || !num) ch[++num] = x % 10 + '0', x /= 10;
	while(num) putchar(ch[num--]);
	putchar('\n');
}

const int N = 1e7 + 79;
int T, n, m;
#define int long long
int v[N+55],prime[N+55],mu[N+55],cnt;
lxl f[N+55],ans;

inline void getmu(){
	mu[1]=1;
	rep(i,2,N){
		if(!v[i]){
			v[i]=i;
			prime[++cnt]=i;
			mu[i]=-1;
		}
		rep(j,1,cnt){
			if(prime[j]>v[i]||1ll*prime[j]*i>N) break;
			v[i*prime[j]]=i;
			if(i%prime[j]==0){
				mu[i*prime[j]]=0;
				break;
			}
			else mu[i*prime[j]]=-mu[i];
		}
	}
	rep(i,1,cnt){
       for(register int j(1);1ll*j*prime[i]<=N;++j) f[j*prime[i]]+=mu[j];		
	}
	rep(i,1,N-1) f[i]+=f[i-1];
}

 main() {
	read(T);
	getmu();
	
	while(T--) {
		ans=0;
		read(n);
		read(m);
		
		if(n>m) swap(n,m);
		
		for(register int i=1,j;i<=n;i=j+1){
			j=min(n/(n/i),m/(n/i));
			ans+=(f[j]-f[i-1])*(n/i)*(m/i);//ǰ׺ºÍ 
		}
		out(ans);	
	}
	return 0;
}

求助

2021/9/5 21:11
加载中...