首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在素数范围内寻找最大出现数字

在素数范围内寻找最大出现数字
EN

Stack Overflow用户
提问于 2015-09-28 12:34:03
回答 1查看 2.5K关注 0票数 1

给定两个数字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。

一个基本办法是:

  • 在a,b-找到所有素数。
  • 取一个计数数组来计数从0到9的次数。
  • 对于范围内的所有素数,提取所有数字并相应地增加计数数组中数字的计数。
  • 从计数数组中找出最大值。

但是对于1,1000000这样的大范围来说,这是低效的。

有什么有效的方法来实现这一点吗?

EN

回答 1

Stack Overflow用户

发布于 2021-02-09 23:06:39

代码语言:javascript
复制
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
  }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32823110

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档