题意:忘了,反正就是打表
题解:打表(前缀和)
代码:
#include<cstdio>
#include<set>
using namespace std;
int num[1000000+5];
int num2[1000000+5][10];
//int sum[1000000+5][10];
int k;
//set<int>s;
int cnt;
int g(int x){
while(x>=10){
x = num[x];
}
return x;
}
int main(){
int q;
int l,r;
for(int i = 1; i <= 1e6; i++){
num[i] = 1;
int x = i;
while(x){
int s = x%10;
x/=10;
if(s!=0){
num[i]*=s;
}
}
// printf("%d ", num[i]);
}
for(int i = 1; i <= 9; i++) num2[i][0] = 0;
for(int i = 1; i <= 1000000;i++){
for(int j = 1; j <= 9;j++){
if(g(i) == j){
num2[i][j] = num2[i-1][j]+1;
}else{
num2[i][j] = num2[i-1][j];
}
}
}
scanf("%d",&q);
while(q--){
scanf("%d%d%d", &l,&r,&k);
if(g(l) == k)
cnt = num2[r][k] - num2[l][k]+1;
else
cnt = num2[r][k] - num2[l][k];
printf("%d\n", cnt);
}
return 0;
}