ZCMU—1689

来源:互联网 发布:seo网站排名优化 编辑:程序博客网 时间:2024/04/27 20:15

1689: 找质数

Time Limit: 10 Sec  Memory Limit: 128 MB
[Submit][Status][Web Board]

Description

质数(prime number)又称素数,有无限个。一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。

根据算术基本定理,每一个比1大的整数,要么本身是一个质数,要么可以写成一系列质数的乘积;而且如果不考虑这些质数在乘积中的顺序,那么写出来的形式是唯一的。最小的质数是2。

目前为止,人们未找到一个公式可求出所有质数。

这道题想要你找出从L到R的区间内的所有质数。为了简化输出,你只需输出给定区间内的所有质数的和。

Input

t测试的数据个数。t<=500

接下来每组测试数据,有两个自然数,L和R。2 <= L <= R <= 10^12-1, R-L <= 106

Output

对每组自然数的区间L,R。输出从L到R中所有质數的和。

Sample Input

3
2 10
3 7
1000000 2000000

Sample Output

17
15
105363426899

【分析】

一直没有做这道题...因为这个数据范围实在太大了...后来发现原来有10s的时限,但这并不代表可以直接暴力判断[l,r]这个区间里每一个数的是否是素数。
首先我们都知道一点,每个合数都可以拆分成若干个素数的乘积。判断大素数显然需要一张素数表。
然后就到了如何判断素数的时候了,这么大的数据范围显然不可能开一个标记数组,但是我们可以发现题目里给出了一点提示,那就是r-l<=10^6,我们没有办法标记10^12这么大的数,但是我们可以标记10^6.
然后就是判断素数的问题了,之前说过直接判断素数显然会超时,然而就算有了一张素数表去按顺序判断,不说这张素数表不够大可能会有大数据出现小漏洞,光是速度就一定会超时。
所以,为什么不考虑用筛法的思想呢?既然已经可以做到对区间的标记,那就完全可以用筛法去做,这样的话就简单了,只是做t次筛法而已。
当然这个筛法中需要思考的一点是,一般的筛法是对一个素数x从x*2标记,但是这道题,显然并不能直接x*2.
所以我们需要一个判断去计算第一个需要被标记的位置
也就是l/prime[i]+1)*prime[i];
当然,如果l可以被prime[i]整除,那么显然就是从l开始标记。
【代码】
#include <stdio.h>#include <string.h>int len=0;int prime[1000000];int f[1000100];long long l,r;void init(){memset(f,0,sizeof(f));for (int i=2;i<=1000000;i++)if (!f[i]){prime[len++]=i;for (int j=i*2;j<=1000000;j+=i)f[j]=1;}}void find(){memset(f,0,sizeof(f));for (int i=0;i<len;i++)if (prime[i]>r) break;else{long long j;if (l%prime[i]==0) j=l;else j=(long long)(l/prime[i]+1)*prime[i];for (;j<=r;j+=prime[i]) if (j!=prime[i]) f[j-l]=1;}}int main(){init();int pp;scanf("%d",&pp);while (pp--){scanf("%lld%lld",&l,&r);find();long long ans=0;for (int i=0;i<=r-l;i++) if (!f[i]) ans+=i+l;printf("%lld\n",ans);}}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 买了商铺付了首付商铺倒闭了怎么办 宝宝刚满月不喜欢在床上睡怎么办 别人给我打了收货款不发货怎么办 业务员私收货款公司不发货怎么办 付款后商家没发货也不退钱怎么办 苹果7P修过主板耗电严重怎么办 oppo手机进水了开不了机怎么办 手机弯了变形但不影响使用怎么办 拼多多留错电话怎么办如果已经发货 苹果6手机后壳变形了怎么办 京东退货保修卡丢了怎么办 如果京东买的显示器屏碎了怎么办 在微信上买东西退货不退钱怎么办 手机分期付款不还款被起诉了怎么办 朋友用我的花呗分期不还钱怎么办 朋友用我身份证办分期不还钱怎么办 我手机号被别人绑定信用卡了怎么办 5s用不了4g网络怎么办 红米手机返回键没了怎么办 小米手机进水了开不了机怎么办 手机返回键和菜单键失灵怎么办 苹果5s指纹按键坏了怎么办 小米手机安卓系统耗电量大怎么办? 苹果5s充不进去电怎么办 苹果手机6s返回键失灵怎么办 本人被骗同时被利用骗了别人怎么办 京东取消订单后货到了该怎么办 京东电信日租卡流量顶置了怎么办 苹果6s进水后闪光灯不亮怎么办 华为手机情景义停车事项过期怎么办 拼多多付款后商品下架了怎么办 淘宝上买化妆品买到假货了怎么办 找苹果官网解id发票丢了怎么办 客人已交订金但要取消宴席怎么办 京东买的小米电视碎屏了怎么办 京东购买的电视碎屏了怎么办 淘宝上买手机不能用不给退怎么办 天猫申请退货退款卖家不处理怎么办 在淘宝买到货到付款的假苹果怎么办 跟朋友买手机买到假货怎么办 在淘宝网上买到不合格的产品怎么办