【LOJ#6202.】 叶氏筛法(EES)
计算给定区间内所有质数之和。
输入格式
输入一行两个整数 L,RL,R。
输出格式
输出一个整数,表示 LL 到 RR 之间(包括 LL 和 RR)所有质数的和。
评分方式
假设你的输出是 xx,正确答案是 yy,那么:
如果y×(1−10−10)−1≤x≤y×(1+10−10)+1y×(1−10−10)−1≤x≤y×(1+10−10)+1y \times ( 1 - 10^{-10} ) - 1 \leq x \leq y \times ( 1 + 10^{-10} ) + 1y×(1−10 −10 )−1≤x≤y×(1+10 −10 )+1y×(1−10−10)−1≤x≤y×(1+10−10)+1y×(1−10−10)−1≤x≤y×(1+10−10)+1,你能得到该测试点的全部分数;
否则,该测试点你不得分。
(说人话就是:若果你不想写高精的话,可以用 double 存答案)
样例输出保证是准确的。
样例
样例输入 1
3 16
样例输出 1
39
样例解释 1
3 + 5 + 7 + 11 + 13 = 39 3+5+7+11+13=39
样例输入 2
1 9876547210
样例输出 2
2167522859485863766
代码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
#define maxx 322005
using namespace std;
int prime[30005],cnt;
ll sum[maxx];
void init()
{for(int i=2;i<maxx;i++)sum[i]=i;for(int i=2;i<maxx;i++){if(sum[i]==i)prime[++cnt]=i;for(int j=1;j<=cnt&&(ll)prime[j]*i<maxx;j++){sum[prime[j]*i]=0;if(i%prime[j]==0)break;}}for(int i=2;i<maxx;i++)sum[i]+=sum[i-1];cout<<cnt<<endl;
}
ll w[maxx<<1],tot;
int id1[maxx],id2[maxx];
double g[maxx<<1];
ll _s;
double solve(ll n)
{_s=sqrt(n);tot=0;for(ll i=1,last;i<=n;i=last+1){ll now=n/i;w[++tot]=now;last=n/now;if(now<=_s)id1[now]=tot;else id2[n/now]=tot;g[tot]=((double)now+2)*(now-1)/2;//cout<<g[tot]<<endl;}for(int i=1;i<=cnt&&prime[i]<=_s;i++){for(int j=1;j<=tot;j++){if((ll)prime[i]*prime[i]>w[j])break;ll now=w[j]/prime[i];int k=(now<=_s?id1[now]:id2[n/now]);g[j]-=(g[k]-sum[prime[i]-1])*prime[i];//cout<<g[j]<<" "<<g[k]<<" "<<sum[prime[i]-1]<<" "<<prime[i]<<endl;}}return g[1];
}
double get(ll x)
{return x<maxx?sum[x]:solve(x);
}
int main()
{//cout<<sqrt(1e11)<<endl;init();ll l,r;cin>>l>>r;printf("%.0f\n",get(r)-get(l-1));return 0;
}
【LOJ#6202.】 叶氏筛法(EES)相关推荐
- 进阶必备:素数筛法(欧拉,埃氏筛法)
筛选素数其实有两种比较高效的算法可以提供选用,分别是:Eratosthenes筛选法与欧拉筛选法.但是欧拉算法的普适性比较高,所以这里就只介绍欧拉函数的算法. 筛选的范围较小的话,欧拉算法,数据较大, ...
- 素数计算之埃氏筛法、欧拉筛法
埃氏筛法 int main() {const int maxNumber=200;int isPrime[maxNumber];int i;int x;for (i=0;i<maxNumber; ...
- C++Eratosthenes埃氏筛法获取素数列表的实现算法(附完整源码)
C++Eratosthenes埃氏筛法获取素数列表的实现算法 C++Eratosthenes埃氏筛法获取素数列表的实现算法完整源码(定义,实现,main函数测试) C++Eratosthenes埃氏筛 ...
- 埃氏筛法的一般写法(区间筛法)
问题: 求 $[L, R]$ 之间的素数表 解法: 一个合数 $n$ 的最小素因子不超过 $\sqrt{n}$. 先用埃氏筛法求出 $[1,\lfloor \sqrt{R} \rfloor]$ 上的素 ...
- 叶氏量能大抄底(通达信副图)
"叶氏量能大抄底"---精准率极高!!! {用法:趋势线上涨要有量能线的配合,重点关主趋势线>5时的拐头向上,如量能线也向上,涨幅可观} BIAS1:=(CLOSE-MA(CLOSE,6))/M ...
- 埃氏筛法求质数(例如:200以内的质数)
传统求质数 全部遍历,是否有因数可以整除 private boolean isPrime(int n){if(n < 2){return false;}if(n == 2 || n == 3 | ...
- 埃拉托色尼筛选法巧解质数问题(埃氏筛法求解素数问题)
背景: 素数(即质数)问题是老问题了,程序员面试问题,大小比赛的热门题. 比如 最简单的判断素数问题,或者计算素数的个数,等等. 简单的判断素数函数: 素数的定义:指在大于1的整数中,只能被1和它本身 ...
- 埃氏筛法求素数(C语言)
问题要求: 用埃氏筛法求100000以内的素数,并输出总个数. 知识简介: 埃氏筛法,全名埃拉托斯特尼筛法,也叫爱氏筛法,是一种由希腊数学家埃拉托斯特尼所提出的一种简单检定素数的算法. 要得到 自然数 ...
- 筛质数—(朴素筛法、埃氏筛法、欧拉筛法(线性筛法))
筛质数时首先要了解质数的定理:1~n中有 个质数 下面再来看具体算法: 1.朴素筛法: 直接把2~n-1中质数和合数的倍数都筛一遍,其代码如下所示: int primes[N],cnt=0; boo ...
最新文章
- 智能车竞赛技术报告 | 智能车视觉 - 天津大学 - 北洋钽星
- 莫队+带修莫队模板与总结
- python怎样打开加密的文件_如何用Python 加密文件
- 天云大数据_天云大数据三度蝉联毕马威领先金融科技50强
- C++判断文件夹是否存在
- RPC 技术及其框架 Sekiro 在爬虫逆向中的应用,加密数据一把梭
- lunix 安装python3
- [20170508]listagg拼接显示字段.txt
- 部分xcode插件可能有新版本
- 面试常问的深度学习(DNN、CNN、RNN)的相关问题
- java debug详解_Java远程debug详解
- Java版扫雷小游戏
- 鸿蒙系统下载 绿色,WiseFolderHider(文件夹加密软件)4.3.7
- VMware卸载不干净导致安装VMware报错(无法安装服务vmware Authorization server请确保你有足够的权限)
- 领域驱动战略设计实践
- 尝试 Nitrux 系统的六大理由
- 贾玲,这次你是不是可以真的快乐了?
- U盘安装win7 启动一键u盘安装Ghost Win7系统教程
- 国家密码管理局公告——密码行业标准更新26项
- 小四年级下册计算机教学计划,小学四年级下第二学期信息技术教学计划.doc
热门文章
- Android自定义View详解,大厂直通车!
- Android中微信主界面菜单栏的布局实现代码
- 软件测试,浅析这项黑色艺术的难与易
- 浅谈学习掌握linux系统的优势
- html chrome中引入外部字体,强制Chrome在CSS中使用外部字体
- 单词APP的工作历程复盘
- Debian10Standard无网络安装后,设置静态IP,安装openssh-server 221024记录
- java软件自学_Java编程自学软件下载
- 用Affinity制作无缝贴图
- 基于参数化最小互熵(Parametric Minimum Cross Entropy,PMCE)算法的PAPR抑制matlab仿真