zoukankan      html  css  js  c++  java
  • Codeforces Round #226 (Div. 2)C. Bear and Prime Numbers

    /*
        可以在筛选质数的同时,算出每组数据中能被各个质数整除的个数,
        然后算出[0,s]的个数 [l,r] 的个数即为[0,r]的个数减去[0,l]个数。
     */
    #include <stdio.h>
    #include <iostream>
    #include <string.h>
    #define maxn 10000010
    using namespace std;
    
    int prime[maxn];
    int isprime[maxn];
    int x[maxn];
    
    void make_prime(){
        memset(isprime, 0, sizeof(isprime));
        for(int i = 2;i < maxn;i++){
            if(!isprime[i]){
                //prime[i] += x[i];
                for(int j = i;j < maxn;j += i){
                    isprime[j] = 1;
                    prime[i] += x[j];
                }
            }
        }
    //    for(int i = 0;i < 100;i++)
    //        printf("%d ",prime[i]);
        for(int i = 2;i < maxn;i++)
            prime[i] += prime[i-1];
        
    }
    
    int main(){
        int n,m;
        while(~scanf("%d",&n)){
            int temp = 0;
            memset(x, 0, sizeof(x));
            memset(prime, 0, sizeof(prime));
            for(int i = 0;i < n;i++){
                scanf("%d",&temp);
                x[temp]++;
            }
    //        for(int i = 0;i < 25;i++)
    //            printf("%d ",x[i]);
    //        printf("
    ");
            make_prime();
            int l,r;
            scanf("%d",&m);
            while(m--){
                scanf("%d%d",&l,&r);//由于x1, x2, ..., xn (2 ≤ xi ≤ 10^7)
                if(l > maxn)
                    l = maxn-1;//这里的边界一定要注意,WA了好几次才发现
                if(r > maxn)
                    r = maxn-1;
                printf("%d
    ",prime[r]-prime[l-1]);
            }
        }
        return 0;
    }
  • 相关阅读:
    轻节点如何验证交易的存在
    梯度爆炸/消失与初始化参数
    归一化能够加速训练的原因
    正则化可以防止过拟合的原因
    关于周志华《机器学习》中假设空间规模大小65的计算
    linux学习0001
    目标检测算法
    opencv安装与卸载
    前端学习02
    前端学习01
  • 原文地址:https://www.cnblogs.com/Roly/p/3601418.html
Copyright © 2011-2022 走看看