题解:对每一个>2的质数分解,最后统计2的个数
注意:如果一开始没有2则ans需+1,因为第一次求phi的时候并没有消耗2
WA了好几遍
#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
const int u=200000;
int T;
int m;
long long ans;
long long a[u+10];
void Div(int n,long long k){
for(int i=2;i*i<=n;++i){
while(n%i==0){
a[i]+=k;n/=i;
}
}
if(n>1)a[n]+=k;
}
void Getans(){
for(int i=u;i>=2;--i){
if(a[i]==0)continue;
ans=max(ans,a[i]);
Div(i-1,a[i]);
}
}
int main(){
scanf("%d",&T);
while(T--){
memset(a,0,sizeof(a));
ans=0;
scanf("%d",&m);
while(m--){
int x,y;
scanf("%d%d",&x,&y);
a[x]=y;
}
int fla=(a[2]?0:1);
Getans();
printf("%lld\n",ans+fla);
}
return 0;
}