一行,两个整数 l 和 r (1 ≤ l ≤ r ≤ 10^9)。
输出9行。
第 i 行,输出数码 i 出现的次数。
1 4
4 2 1 1 0 0 0 0 0
function sol(a, b) {
var ret = [0,0,0,0,0,0,0,0,0];
for(let i=a; i<=b; i++) {
iter(i, ret);
}
return ret;
}
function iter(x, ret) {
var num1;
var num2;
for(let i=1; i*i<=x; i++) {
if(x % i == 0) {
num1 = i;
num2 = x/i;
while(num1/10 >= 1){
num1 = Math.floor(num1/10);
}
if(num2 != num1){
while(num2/10 >= 1){
num2 = Math.floor(num2/10);
}
ret[num2-1] += 1;
}
ret[num1-1] += 1;
}
}
}
var data = readline().split(' ');
var a = parseInt(data[0]);
var b = parseInt(data[1]);
var result = sol(a,b);
for(let i=0; i<9; i++) {
print(result[i]);
}
相对于暴力遍历,这里面我只加了
for(let i=1; i*i<=x; i++)
这一个优化,应该时间复杂度可以到 o(n√n)的,但是结果出错,32-8300的例子,返回的数字不对,有没大神帮我看下我哪里出了bug?只是缩小了一下遍历范围呀。