zoukankan      html  css  js  c++  java
  • Jzoj5458【NOIP2017提高A组冲刺11.7】质数

    小X 是一位热爱数学的男孩子,在茫茫的数字中,他对质数更有一种独特的情感。小X 认为,质数是一切自然数起源的地方。
    在小X 的认知里,质数是除了本身和1 以外,没有其他因数的数字。
    但由于小X 对质数的热爱超乎寻常,所以小X 同样喜欢那些虽然不是质数,但却是由两个质数相乘得来的数。
    于是,我们定义,一个数是小X 喜欢的数,当且仅当其是一个质数,或是两个质数的乘积。
    而现在,小X 想要知道,在L 到R 之间,有多少数是他喜欢的数呢?

    今天题目放水了,10点半打完在机房玩纸牌,结果只赢了一局qwq

    让后第三题就爆炸剩下10分了qwq

    当然这道题相信各位还是可以一眼秒的

    基本线性筛,把质数表筛出来之后一个个乘起来,大过max就退出好了

    #include<stdio.h>
    #include<string.h>
    #include<algorithm>
    #define M 10000000
    using namespace std;
    bool vis[10000010],v2[10000010];
    int w[3000010],t,sum[10000010],n;
    int main(){
    	freopen("prime.in","r",stdin);
    	freopen("prime.out","w",stdout);
    	scanf("%d",&n);
    	for(int i=2;i<=M;++i){
    		if(!vis[i]){
    			w[++t]=i;
    			for(int j=1;j<=t&&i*w[j]<=M;++j) vis[i*w[j]]=1;
    		} else for(int j=1;j<=t&&i*w[j]<=M;++j){
    				vis[i*w[j]]=v2[i*w[j]]=1;
    				if(i%w[j]==0) break;
    			}
    	}
    	for(int i=vis[1]=v2[1]=1;i<=M;++i) sum[i]=sum[i-1]+!v2[i];
    	for(int x,y;n--;){
    		scanf("%d%d",&x,&y);
    		printf("%d
    ",sum[y]-sum[--x]);
    	}
    }

  • 相关阅读:
    最好的在线打字练习网站
    input 的 type 等于 file
    windows 删除文件或文件夹
    nvm 管理 node 版本
    github 的 fork 取消功能
    window cmd 命令行下创建文件夹和文件
    17_10_11 Redis 指令
    17_10_11 Mac 上的brew 安装指令
    17_10_11 运算符&,&&,>> 和 >>>
    17_10_10 乱码问题总结
  • 原文地址:https://www.cnblogs.com/Extended-Ash/p/9477228.html
Copyright © 2011-2022 走看看