1 条题解

  • 4
    @ 2024-10-26 18:16:33

    题意概述

    找到11~nn中所有的偶数个数; 偶数定义为质因子个数大于1的数。

    如何找到奇数

    只要找打奇数就能求出偶数

    我们已经知道在本题中奇数的定义是因子中只有一个质数,因此我们得知任意质素的k次幂都是奇数,我们只需要找到所有的奇数就能求出偶数个数。

    所以只需要通过素数筛找到每一个素数,然后再找到小于等于nn的最大次幂。

    主要代码如下

    普通素数筛
      bool t[1e7];//bool调用时间比int快
      int ans = 0;//记录奇数个数
      for(int i = 2 ; i <= n ; i ++) { // 判断所有数
            if(!t[i]){ 
                ans ++ ;
                for(int j = i * i ; j <= n ; j *= i ) { // 找到剩余奇数
                    ans ++;
                }
                //优化时间
                for(int j = i * i ; j <= n ; j += i) {
                    t[j] = true;
                }
            }
        }
    

    主要考察了同学对素数的理解和素数筛的运用

    需要注意的是本题数据范围最大是 1e71e7,乘法运算时有可能会超 intint 范围,注意开 longlonglonglong

    • @ 2024-10-30 15:02:08

      补充,为了让同学们脚踏实地,我苦心研究的数据专门卡了一下#define int long long 的范围,也就是说如果你用了#define int long long 来图省事方便,肯定会被我的神奇数据卡掉的(善良

    • @ 2024-10-31 19:59:01

      太神奇,有没有人没开,bool就过了的。

  • 1

AC之后我居然穿越到了异世界!?

信息

ID
1036
时间
1000ms
内存
256MiB
难度
9
标签
递交数
181
已通过
14
上传者