给定两个数字a和b (1 <= a <= b <= 10^6)。在a和b之间的所有素数中查找最频繁的数字。如果频率相同,则打印最高数字。
例:从1到20,素数是- 2,3,5,7,11,13,17,19。在这里,2,5,9只发生一次,3,7发生两次,1发生5次。结果是1。
一个基本办法是:
但是对于1,1000000这样的大范围来说,这是低效的。
有什么有效的方法来实现这一点吗?
发布于 2021-02-09 23:06:39
function writeOutput(left, right) {
let digitCount = new Array(10);
digitCount.fill(0)
for(let num = left ; num <= right; num++){
if(isPrime(num)){
let copyNum = num;
while (copyNum > 0){
let d = copyNum % 10;
digitCount[d]++;
copyNum = copyNum / 10;
}
}
}
let maxCount = 0;
let maxNum = 0;
for (let j = 0; j < digitCount.length; j++){
if(digitCount[j] > maxCount){
maxCount = digitCount[j];
maxNum = j;
}
}
if(maxCount == 1){
for(let k = digitCount.length - 1; k > 0; k--){
if(digitCount[k] > 0){
maxNum = k;
break;
}
}
} else if( maxCount > 1){
return maxNum;
} else {
maxNum = -1;
}
return maxNum
}
function isPrime(n){
for(let i = 2; i * i <= n; i++){
if(n % i == 0){
return false
}
}
return true
}https://stackoverflow.com/questions/32823110
复制相似问题