https://www.lydsy.com/JudgeOnline/problem.php?id=2749
这道题还是比较有思维的
我借鉴了一点题解
不完全是自己完成的
BZOJ总是这样
每当你做好了第一发WA的准备
他总能让你1Y
题解是
次数就等于2的产生量
因为2的产生量远远大于2的消耗量
所以欧拉函数多少次后必定是偶数
那么打表然后求和就好
注意第一次可能这个数是奇数
所以要特判一下2
AC代码:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1e5;
int phi[N+10],A[N+10];
int main(){
for(int i=1;i<=N;++i)
phi[i]=i;
for(int i=2;i<=N;++i){
if(phi[i]==i){
for(int j=i;j<=N;j+=i){
phi[j]=phi[j]/i*(i-1);
}
}
}
A[2]=1;
for(int i=3;i<=N;++i){
int a=0,b=i;
while(b%2==0){
b/=2;
++a;
}
A[i]=a+A[phi[b]];
}
int T;
cin>>T;
while(T--){
ll ans=0;
int n;
cin>>n;
for(int i=1;i<=n;++i){
ll p,q;
cin>>p>>q;
if(p==2)
--ans;
ans+=q*A[p];
}
++ans;
cout<<ans<<endl;
}
}