华师一附中OI组

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1050|回复: 1
打印 上一主题 下一主题

P1865 A % B Problem

[复制链接]

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
跳转到指定楼层
楼主
发表于 2018-9-23 14:01:53 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
https://www.luogu.org/problemnew/show/P1865



题目背景
题目名称是吸引你点进来的

实际上该题还是很水的

题目描述
区间质数个数

输入输出格式
输入格式:
一行两个整数 询问次数n,范围m

接下来n行,每行两个整数 l,r 表示区间

输出格式:
对于每次询问输出个数 t,如l或r∉[1,m]输出 Crossing the line

输入输出样例
输入样例#1:
2 5
1 3
2 6
输出样例#1:
2
Crossing the line
说明
【数据范围和约定】

对于20%的数据 1<=n<=10 1<=m<=10

对于100%的数据 1<=n<=1000 1<=m<=1000000 -10^9<=l<=r<=10^9 1<=t<=1000000
回复

使用道具 举报

50

主题

215

帖子

619

积分

高级会员

Rank: 4

积分
619
沙发
 楼主| 发表于 2018-9-23 14:02:20 | 只看该作者
  1. #include<iostream>
  2. #define FOR(i,a,b) for(int i=a;i<=b;i++)
  3. #define ROF(i,a,b) for(int i=a;i>=b;i--)
  4. using namespace std;
  5. int prime[10000005],f[10000005],n,m,a,b,t,tot;
  6. bool num[10000005];
  7. void eural(int x)
  8. {
  9.     f[1]=0;
  10.     FOR(i,2,x)
  11.     {
  12.         if(!num[i])
  13.         {
  14.             prime[++tot]=i;
  15.             f[i]=f[i-1]+1;
  16.         }
  17.         else
  18.             f[i]=f[i-1];
  19.         FOR(j,1,tot)
  20.         {
  21.             if(i*prime[j]>x)
  22.                 break;
  23.             num[i*prime[j]]=1;
  24.             if(i%prime[j]==0)
  25.                 break;
  26.         }
  27.     }
  28. }
  29. int main()
  30. {
  31.     cin>>n>>m;
  32.     eural(m);
  33.     while(n--)
  34.     {
  35.         cin>>a>>b;
  36.         if(a<1 || b>m)
  37.         {
  38.             cout<<"Crossing the line"<<endl;
  39.             continue;
  40.         }
  41.         else
  42.         {
  43.             t=f[b]-f[a-1];
  44.             cout<<t<<endl;
  45.         }
  46.     }
  47.     return 0;
  48. }
复制代码
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|小黑屋|服务支持:DZ动力|华师一附中OI组  

GMT+8, 2024-11-2 00:26 , Processed in 0.276703 second(s), 22 queries .

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表