zoukankan      html  css  js  c++  java
  • CodeForces114 Double Happiness 数论 二次筛法 bitset的应用

    此题难点有三:
    1.是素数且是平方数的和的形式的数有哪些?

    费马二平方定理:除了2这个特殊的素数,所有的素数都可以分两类:被4除余1的素数。 第二类则是被4除余3的素数。第一类素数都能表示为两个整数的平方和,第二类都不能。

    因此此题可以转化为[L , R ]中有多少数是除以4余3的。

    2.数据范围3e8

    普通的数组是明显开不下的。考虑用bitset代替普通数组处理出is_prime。

    3.怎么筛。

    POJ有一道经典题介绍了经典办法:素数二次筛选。

    先处理出 小于等于SQRT(R)的素数。然后用这个区间里的素数的倍数筛掉[L,R]里的合数。

    此题正是这三者的结合。

    CF 2200分,number theory

    bitset<maxn> is_prime;
    
    int main() {
        int l, r;
        l = readint(), r = readint();
        is_prime.set();
        for (int i = 3; i * i <= r; i += 2)
            if (is_prime[i]) for (int j = i * i; j <= r; j += 2 * i) is_prime[j] = false;
        int res = (l <= 2 && r >= 2);
        for (int i = 5; i <= r; i += 4) {
            if (i >= l && is_prime[i]) res++;
        }
        printf("%d
    ", res);
    }
  • 相关阅读:
    记住密码
    winform 更新服务器程序
    asp.net TreeView
    asp.net excel导出红色字体
    asp.net 图表
    图数据存储初见
    在windows下安装hadoop
    R 语言实现牛顿下降法
    蛇形矩阵
    算法竞赛入门经典习题2-6 排列(permutation)
  • 原文地址:https://www.cnblogs.com/hznumqf/p/13432790.html
Copyright © 2011-2022 走看看