题目链接





map:

//杜教筛
#include<map>
#include<cstdio>
typedef long long LL;
const int N=5e6; int mu[N+3],P[N+3],cnt;
bool Not_P[N+3];
std::map<LL,LL> sum;
//std::map<LL,LL>::iterator it; void Init()
{
mu[1]=1;
for(int i=2;i<N;++i)
{
if(!Not_P[i]) P[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*P[j]<N;++j)
{
Not_P[i*P[j]]=1;
if(!(i%P[j])) {mu[i*P[j]]=0; break;}
mu[i*P[j]]=-mu[i];
}
}
for(int i=2;i<N;++i) mu[i]+=mu[i-1];
}
LL Calc(LL n)
{
if(n<N) return mu[n];
// if((it=sum.find(n))!=sum.end()) return it->second;//效率是几乎一样的
if(sum.count(n)) return sum[n];
LL ans=1;
for(LL nxt,i=2;i<=n;i=nxt+1)
nxt=n/(n/i),ans-=(nxt-i+1)*Calc(n/i);
return sum[n]=ans;
} int main()
{
Init();
LL a,b;scanf("%lld%lld",&a,&b);
printf("%lld",Calc(b)-Calc(a-1)); return 0;
}

数组:(使用数组这个trick存的话 对于多组询问就要重新计算了)

但是据(rqy)说map实际用到的次数并不多,所以多次询问还是直接用map吧。

//比map还要慢一点

#include<cmath>
#include<cstdio>
#include<cstring>
#include<algorithm>
typedef long long LL;
const int N=5e6; int mu[N+3],P[N+3],cnt;
LL sum2[15000],Max;
bool Not_P[N+3]; void Init()
{
mu[1]=1;
for(int i=2;i<Max;++i)
{
if(!Not_P[i]) P[++cnt]=i,mu[i]=-1;
for(int j=1;j<=cnt&&i*P[j]<Max;++j)
{
Not_P[i*P[j]]=1;
if(!(i%P[j])) {mu[i*P[j]]=0; break;}
mu[i*P[j]]=-mu[i];
}
}
for(int i=1;i<Max;++i) mu[i]+=mu[i-1];
}
const int EQU=-2333333;
LL Calc(LL n,LL mx)
{
if(n<Max) return mu[n];
if(sum2[mx/n]!=EQU) return sum2[mx/n];
LL ans=1;
for(LL nxt,i=2;i<=n;i=nxt+1)
nxt=n/(n/i),ans-=(nxt-i+1)*Calc(n/i,mx);
return sum2[mx/n]=ans;
} int main()
{
LL a,b;scanf("%lld%lld",&a,&b);
// printf("%.3lf %.3lf\n",pow(a,0.667),pow(b,0.667));
Max=pow(b,0.667), Init();
std::fill(sum2,sum2+15000,EQU); LL ans1=Calc(b,b);
std::fill(sum2,sum2+15000,EQU); LL ans2=Calc(a-1,a-1);
printf("%lld",ans1-ans2); return 0;
}

51Nod.1244.莫比乌斯函数之和(杜教筛)的更多相关文章

  1. 51 NOD 1244 莫比乌斯函数之和(杜教筛)

    1244 莫比乌斯函数之和 基准时间限制:3 秒 空间限制:131072 KB 分值: 320 难度:7级算法题 收藏 关注 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens) ...

  2. 【51nod-1239&1244】欧拉函数之和&莫比乌斯函数之和 杜教筛

    题目链接: 1239:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1239 1244:http://www.51nod. ...

  3. 51nod1244 莫比乌斯函数之和 杜教筛

    虽然都写了,过也过了,还是觉得杜教筛的复杂度好玄学 设f*g=h,∑f=S, 则∑h=∑f(i)S(n/i下取整) 把i=1时单独拿出来,得到 S(n)=(∑h-∑2->n f(i)S(n/i下 ...

  4. 51nod 1244 莫比乌斯函数之和 【杜教筛】

    51nod 1244 莫比乌斯函数之和 莫比乌斯函数,由德国数学家和天文学家莫比乌斯提出.梅滕斯(Mertens)首先使用μ(n)(miu(n))作为莫比乌斯函数的记号.具体定义如下: 如果一个数包含 ...

  5. [51Nod 1244] - 莫比乌斯函数之和 & [51Nod 1239] - 欧拉函数之和 (杜教筛板题)

    [51Nod 1244] - 莫比乌斯函数之和 求∑i=1Nμ(i)\sum_{i=1}^Nμ(i)∑i=1N​μ(i) 开推 ∑d∣nμ(d)=[n==1]\sum_{d|n}\mu(d)=[n== ...

  6. 51nod 1244 莫比乌斯函数之和

    题目链接:51nod 1244 莫比乌斯函数之和 题解参考syh学长的博客:http://www.cnblogs.com/AOQNRMGYXLMV/p/4932537.html %%% 关于这一类求积 ...

  7. 51nod 1244 莫比乌斯函数之和(杜教筛)

    [题目链接] http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1244 [题目大意] 计算莫比乌斯函数的区段和 [题解] 利 ...

  8. [51Nod 1237] 最大公约数之和 (杜教筛+莫比乌斯反演)

    题目描述 求∑i=1n∑j=1n(i,j) mod (1e9+7)n<=1010\sum_{i=1}^n\sum_{j=1}^n(i,j)~mod~(1e9+7)\\n<=10^{10}i ...

  9. 【51nod】1239 欧拉函数之和 杜教筛

    [题意]给定n,求Σφ(i),n<=10^10. [算法]杜教筛 [题解] 定义$s(n)=\sum_{i=1}^{n}\varphi(i)$ 杜教筛$\sum_{i=1}^{n}(\varph ...

随机推荐

  1. 【转】linux的特殊符号与正则表达式

    [转]linux的特殊符号与正则表达式 第1章 linux的特殊符号 1.1 通配符 * {} 1.1.1 含义 方便查找文件 通配符是用来找文件名字的. 1.1.2  * 通过find 命令找以 . ...

  2. 为caffe添加最简单的全通层AllPassLayer

    参考赵永科的博客,这里我们实现一个新 Layer,名称为 AllPassLayer,顾名思义就是全通 Layer,“全通”借鉴于信号处理中的全通滤波器,将信号无失真地从输入转到输出. 虽然这个 Lay ...

  3. java并发编程系列七:volatile和sinchronized底层实现原理

    一.线程安全 1.  怎样让多线程下的类安全起来 无状态.加锁.让类不可变.栈封闭.安全的发布对象 2. 死锁 2.1 死锁概念及解决死锁的原则 一定发生在多个线程争夺多个资源里的情况下,发生的原因是 ...

  4. 【转】Visual Studio——多字节编码与Unicode码

    多字节字符与宽字节字符 1) char与wchar_t 我们知道C++基本数据类型中表示字符的有两种:char.wchar_t. char叫多字节字符,一个char占一个字节,之所以叫多字节字符是因为 ...

  5. tomcat apr

    背景 前面也提过了,这次是在linux下的实验.不要信广告,要看疗效.其实起不了都大作用. 转载 开始安装~    1)安装apr     tar zxvf apr-1.4.2.tar     cd ...

  6. python 运行日志logging代替方案

    以下是自己写的 记录日志的代码.(和logging不搭嘎,如果如要学loggging模块,本文末尾有他人的链接.) # prtlog.py ############################## ...

  7. Go语言规格说明书 之 内建函数(Built-in functions)

    go version go1.11 windows/amd64 本文为阅读Go语言中文官网的规则说明书(https://golang.google.cn/ref/spec)而做的笔记,介绍Go语言的 ...

  8. php中类继承和接口继承的对比

    PHP类继承: 1.PHP类不支持多继承,也就是子类只能继承一个父类,但是支持多层次继承,比如: class frist{ public function __construct(){ echo &q ...

  9. List遍历三种方法:1.for 2.增强性for 3.迭代器

    package chapter09; import java.util.ArrayList;import java.util.Iterator;import java.util.List; /* * ...

  10. 2018-2019 2 20165203 《网络对抗技术》Exp6 信息搜集与漏洞扫描

    2018-2019 2 20165203 <网络对抗技术>Exp6 信息搜集与漏洞扫描 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 实践内容 (1)各种搜索技巧的应用 (2) ...