博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
2019.02.12 bzoj3944: Sum(杜教筛)
阅读量:5173 次
发布时间:2019-06-13

本文共 1366 字,大约阅读时间需要 4 分钟。

题意:
在这里插入图片描述


思路:直接上杜教筛。

知道怎么推导就很简单了,注意预处理的范围。
然后我因为预处理范围不对被zxyoi教育了(ldx你这个傻×两倍常数活该被卡TLE) 喜闻乐见
代码:

#include
#define ri register intusing namespace std;const int N=7500005,lim=7500000;typedef long long ll;namespace Sieve{
int pri[N],tot=0,mu[N]; ll phi[N]; bool vis[N]; map
mpa; map
mpb; inline void init(){
vis[1]=phi[1]=mu[1]=1; for(ri i=2;i<=lim;++i){
if(!vis[i])pri[++tot]=i,phi[i]=i-1,mu[i]=-1; for(ri j=1;j<=tot&&i*pri[j]<=lim;++j){
vis[i*pri[j]]=1; if(i==i/pri[j]*pri[j]){
phi[i*pri[j]]=pri[j]*phi[i],mu[i*pri[j]]=0; break; } phi[i*pri[j]]=(pri[j]-1)*phi[i],mu[i*pri[j]]=-mu[i]; } } for(ri i=2;i<=lim;++i)phi[i]+=phi[i-1],mu[i]+=mu[i-1]; } inline int Mu(const int&x){
if(x<=lim)return mu[x]; if(mpa[x])return mpa[x]; int ret=0; for(ri l=2,r;r
<=x;l=r+1)r=x/(x/l),ret+=Mu(x/l)*(r-l+1); return mpa[x]=1-ret; } inline ll Phi(const int&x){
if(x<=lim)return phi[x]; if(mpb[x])return mpb[x]; ll ret=0; for(ri l=2,r;r
<=x;l=r+1)r=x/(x/l),ret+=Phi(x/l)*(r-l+1); return mpb[x]=(ll)x*((ll)x+1)/2-ret; }}int main(){
freopen("lx.in","r",stdin); Sieve::init(); int tt,n; scanf("%d",&tt); while(tt--)scanf("%d",&n),cout<
<<' '<
<<'\n'; return 0;}

转载于:https://www.cnblogs.com/ldxcaicai/p/10367683.html

你可能感兴趣的文章
MVC实例应用模式
查看>>
[Done]FindBugs: boxing/unboxing to parse a primitive
查看>>
数据库表中字段的字符串替换
查看>>
把二元查找树转变成排序的双向链表
查看>>
input与select 设置相同宽高,在浏览器上却显示不一致,不整齐
查看>>
NUGET常用命令
查看>>
CentOs下Apache+Python+Django+mod_wsgi环境搭建
查看>>
java基础知识总结(3)
查看>>
spark配置
查看>>
数据仓库 - 3.数据仓库基本概念
查看>>
自定义树莓派的显示分辨率
查看>>
sql full left right inner cross 基础
查看>>
Android控件TextView之跑马灯功能问题记录
查看>>
国外漂亮质感网页设计作品欣赏 转
查看>>
SVN学习总结
查看>>
cognos安装 win7+Sqlserver08SP1
查看>>
Java的21个技术点和知识点归纳
查看>>
安卓中Paint类和Canvas类的方法汇总
查看>>
提供openssl -aes-256-cbc兼容加密/解密的简单python函数
查看>>
git使用笔记
查看>>