C. Turtle Fingers: Count the Values of k
题目给出的数据范围a,b小于100,所以可以预处理出所有情况的a,b的不同幂次数的所有情况
使用map<pair<int,int>,set>mp来存储,其中使用到了set而不是vector,主要考虑到了当a==b时会出现重复的结果
cpp
#include<iostream>
#include<map>
#include<vector>
#include<set>
using namespace std;
int quick_pow(int base ,int power){
int ans=1;
while(power){if(power&1){ans*=base;}
base*=base;power>>=1;}
return ans;
}
int main(){
int T;cin>>T;
map<pair<int,int>,set<int>>mp;
for(int i=2;i<=100;i++){
for(int j=i;j<=100;j++){
for(int k1=0;quick_pow(i,k1)<=1e6;k1++){
for(int k2=0;quick_pow(j,k2)<=1e6;k2++){
if(quick_pow(i,k1)*quick_pow(j,k2)>1e6)break;
mp[{i,j}].insert(quick_pow(i,k1)*quick_pow(j,k2));
}
}
}
}
while(T--){
int a,b,l;
cin>>a>>b>>l;
if(b<a) swap(a,b);
int ans=0;
for(auto v:mp[{a,b}]){
if(l%v==0) ans++;
}
cout<<ans<<endl;
}
}