当前位置: 首页 > 知识库问答 >
问题:

用素数对数字进行计数

令狐运珧
2023-03-14

给定一个数N,我需要找到从1到N至少有一个素数(2,3,5或7)的数的计数。

现在N可以高达10^18。解决这个问题的最佳方法是什么。

例句:设N=100,答案是64。

请帮助解决这个问题。

代码:这是主要功能,但显然不是好方法

    long long int n;
    cin>>n;
    long long int count=0;
    for(int i=1;i<=n;i++){
        long long temp=i;
        while(temp>0){
            int rem=temp%10;
            if(rem==2 || rem==3 ||rem==5 || rem==7){
                count++;
                break;
            }
            temp=temp/10;
        }
    }

共有1个答案

微生德泽
2023-03-14

你认为这个问题需要编程!!

用数学来回答。

考虑互补问题,即数字中没有素数。因此只能使用数字{0,1,4,6,8,9}

例如,你可以用这一套产生多少个2位数的数字?答案是6*6=6^2=36。如果n100,则答案是100-36=64

在一个简单的情况下,如果N10的幂,那么答案是n-6^log(N)

那么n不是10的幂。考虑n=57。在这种情况下,当第一个数字低于5时。您可以将{0,1,4}用于第一个数字,将{0,1,4,6,8,9}用于第二个数字。答案是57-3*6+1=40。(主题中排除了零,所以答案是递增的)。

 类似资料:
  • 本文向大家介绍使用 JavaScript 对数组元素进行深度计数,包括了使用 JavaScript 对数组元素进行深度计数的使用技巧和注意事项,需要的朋友参考一下 问题 我们需要编写一个JavaScript函数,该函数接受元素的嵌套数组并返回该数组中存在的元素的深层计数。 输入 输出 由于级别1的元素为2,级别2的元素为2,级别3的元素为1,因此深度计数为7。 示例 以下是代码- 代码说明 我们使

  • 如何计算下面代码中的整数值: 我想实现如果0是超过1所以将打印假如果1是超过0将打印真

  • 主要内容:算法总结及实现,优化算法在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生; 一个保存了商品单价的数组,排序后更容易看出它们的性价比。 对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。 以从小到大排序为例,冒泡排序的整体

  • 编辑:从我的角度来看,这太含蓄了,但这个想法当然是一个可能的解决方案,它将是最快的(比调用两次流生成器更快,并且至少要分别执行两个操作): ...利用一次迭代,而不必在内存上加载整个集合。我在做答案并行化的测试

  • 问题是: 你有N (N代表你拥有的数字的数量)个数字。将他们分成两组,使各组数字之和的差异最小。 例子: 如果我们把1、9和3放在A组,把5和8放在B组,差异是0。 我认为首先我应该计算所有数字的总和并将其除以2。然后检查任何可能的数字组合,其总和不大于所有数字之和的一半。完成此操作后,我将选择最大的数字并打印出组。 我对所有的组合都有问题,特别是当N是大数字时。如何运行所有组合? 我的想法也有点

  • 问题内容: 我想知道是否可以在SQLAlchemy中生成一个语句而无需使用显式地请求它。如果我使用: 然后它会生成如下内容: 这在使用InnoDB的MySQL中要慢得多。我正在寻找一种不需要表具有已知主键的解决方案,如使用SQLAlchemy获取表中的行数中所建议。 问题答案: 我设法在两层上使用SQLAlchemy呈现以下SELECT。 SQL表达式层的用法 来自ORM层的用法 您只需将其子类化