\(\text{Poblem}\)

求 \(\sum_{i=l}^r \mu(i)\)

\(1 \le l,r \le 10^{18}, r - l \le 10^5\)

\(\text{Analysis}\)

我们做过 \(r,l \le 10^{12}\) 次方的区间筛积性函数

但这是因为 \(\sqrt r\) 内的素数可以快速筛出来

又可以用这些素数处理 \(r \le 10^{12}\) 的数的积性函数

但现在 \(\sqrt r\) 已经达到 \(10^9\) 级别了

\(so...\)

我们仍然用 \(10^6\) 以内的素数处理,并将原来的数除掉这些素数

那么剩下的数 \(x\) 只有三种形式

\(3.x=p^2\)

\(2.x=p\)

\(1.x=pq\)

\(p,q \in \mathbb P,p \not = q\)

考虑第一种情况,只需要判断 \(\sqrt x\) 强转整型后再平方是否等于 \(x\)

考虑第二种情况,由于 \(x\) 可能非常大,那么就需要 \(\text{Miller Rabin}\) 来判断素数

考虑第三种情况,两个不等的素数,\(\mu\) 不变,且判完前两个情况只剩这种情况,不必再考虑

愉快解决

\(\text{Code}\)

#include<cstdio>
#include<algorithm>
#include<ctime>
#include<cmath>
using namespace std;
typedef long long LL; const int R = 100005;
LL l, r, num[R];
int prime[600005], totp, mu[R], vis[1000005]; inline LL sqr(LL x){return x * x;} inline void getprime()
{
for(int i = 2; i <= 1e6; i++)
{
if (!vis[i]) prime[++totp] = i;
for(int j = 1; j <= totp && i * prime[j] <= 1e6; j++)
{
vis[i * prime[j]] = 1;
if (i % prime[j] == 0) break;
}
}
} inline LL fmul(LL x, LL y, LL p)
{
return (x * y - (LL)((long double)x / p * y) * p + p) % p;
}
inline LL fpow(LL x, LL y, LL p)
{
LL res = 1;
for(; y; y >>= 1)
{
if (y & 1) res = fmul(res, x, p);
x = fmul(x, x, p);
}
return res;
}
inline int Miller_Rabin(LL p)
{
srand(time(0));
if (p <= 3) return (p == 2 || p == 3);
if (!(p & 1)) return 0;
LL d = p - 1, b = 0;
while (!(d & 1)) d >>= 1, b++;
for(int i = 0; i < 3; i++)
{
LL a = rand() % (p - 3) + 2, u = fpow(a, d, p), v;
for(int j = 0; j < b; j++)
{
v = fmul(u, u, p);
if ((v == 1) && (u != 1) && (u != p - 1)) return 0;
u = v;
}
if (u != 1) return 0;
}
return 1;
} inline LL solve()
{
for(int i = 1; i <= r - l + 1; i++) mu[i] = 1, num[i] = l + i - 1;
for(int i = 1; i <= totp && prime[i] <= r; i++)
for(LL j = max(1LL, l / prime[i]); j * prime[i] <= r; j++)
if (j * prime[i] >= l)
{
if (j % prime[i] == 0) mu[j * prime[i] - l + 1] = 0;
else mu[j * prime[i] - l + 1] *= -1, num[j * prime[i] - l + 1] /= prime[i];
}
for(int i = 1; i <= r - l + 1; i++)
{
if (!mu[i] || num[i] == 1) continue;
if (sqr(sqrt(num[i])) == num[i]) mu[i] = 0;
else if (Miller_Rabin(num[i])) mu[i] *= -1;
}
LL ans = 0;
for(int i = 1; i <= r - l + 1; i++) ans += mu[i];
return ans;
} int main()
{
scanf("%lld%lld", &l, &r);
getprime();
printf("%lld\n", solve());
}

LG P3653 小清新数学题的更多相关文章

  1. Miller Rabin 详解 && 小清新数学题题解

    在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...

  2. 三石推荐!把 Bootstrap 小清新带回家!

    无敌传送门:http://fineui.com/demo_pro/default.aspx?theme=bootstrap1&menu=accordion   喜欢就来赞一个! 把麻烦留给三石 ...

  3. 小清新的jQuery ck-slide 图片轮播

    ck_slide 是一款小清新的jQuery 幻灯片插件,它非常小巧,压缩后仅 3KB,基本功能可以满足.它支持淡入淡出/左右滚动.箭头/圆点控制.自动播放. 在线实例 默认(淡入淡出) 左右滚动 自 ...

  4. easyui小清新俺也晒晒 视频管理软件bs项目

    easyui小清新俺也晒晒 视频管理软件bs项目 针对设备的管理软件 这是我听到最多的话.视频管理软件bs项目.easyui 好与坏我不去评价 项目做了好几个月,其实代码看来也没用多少,但是做需求,时 ...

  5. Photoshop调出外景婚片蓝色小清新艺术效果

    春季婚纱旺季来了,好多童鞋给我抱怨说客片太难转色了,春天的小清新感都转不了,其实并不难,运用好互补色来进行加减色,能很快调整好照片的偏色,互补色也可称为对比色,后期调色的加也可称为减,如加蓝=减黄.加 ...

  6. LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田

    题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...

  7. P3674 小清新人渣的本愿

    P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...

  8. 【Luogu3676】小清新数据结构题(动态点分治)

    [Luogu3676]小清新数据结构题(动态点分治) 题面 洛谷 题解 先扯远点,这题我第一次看的时候觉得是一个树链剖分+线段树维护. 做法大概是这样: 我们先以任意一个点为根,把当前点看成是一棵有根 ...

  9. 【洛谷3674】小清新人渣的本愿(莫队,bitset)

    [洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...

  10. 用RecyclerView做一个小清新的Gallery效果

    一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...

随机推荐

  1. 轻松玩转sed

    sed处理文本方法 1.文本或管道输入 2.读入一行到模式控件 3.sed命令处理 4.输出到屏幕 所以 sed是一个流处理编辑器 sed一次处理一行内容 sed不改变文件内容(可以通过重定向改变文件 ...

  2. Golang反射获得变量类型和值

    1. 什么是反射 反射是程序在运行期间获取变量的类型和值.或者执行变量的方法的能力. Golang反射包中有两对非常重要的函数和类型,两个函数分别是: reflect.TypeOf 能获取类型信息re ...

  3. 【大数据面试】Flink 03-窗口、时间语义和水印、ProcessFunction底层API

    三.窗口 1.窗口的介绍 (1)含义 将无限的流式数据切割为有限块处理,以便于聚合等操作 (2)图解 2.窗口的分类 (1)按性质分 Flink 支持三种划分窗口的方式,time.count和会话窗口 ...

  4. 国产paozhu c++ web framework 正式版发布

    经过大半个月测试修改 paozhu c++ web framework 正式版发布, 1.0.5 release 官方第一次发布正式版,可以用于生产环境. 易用性 超越国外各种 c++ web fra ...

  5. 如何使用ChatGPT来自动化Python任务

    1.概述 最近,比较火热的ChatGPT很受欢迎.今天,笔者为大家来介绍一下ChatGPT能做哪些事情. 2.内容 ChatGPT是一款由OpenAI开发的专门从事对话的AI聊天机器人.它的目标是让A ...

  6. 我们来汉化IntelliJ IDEA

    (原发于 GitHub Pages,2018-10-13 13:51:09) 两年前我从一名光荣的C++程序员专业为PHP程序员以后,告别了世界第一IDE Visual Studio,改用当时觉得特别 ...

  7. Linux c 获取U盘挂载路径

    思路: 1.执行df -h 找到 带mnt的行.将结果存入一个文件中. system("df -h |grep mnt >./extendevinfo.txt"); 也可以直 ...

  8. 小项目中vuex使用频率不太多我们完全可以用provide inject 来代替可以让项目小不少

    在一般小型项目中vuex实在是太浪费了所以我们可以用到 vue中的provide inject 代替 1.在vue3中我们先另起一个 文件创建一个全局的状态和方法的地方(如果你的全局状态特别的多记得要 ...

  9. Python3+Selenium3自动化测试-(准备)

    Python3+Selenium3自动化测试-(准备) 最近在学习selenium自动化测试相关的内容,所以将实际准备情况做一记录, # 系统:win10(64位) # 浏览器:Chrome(67.0 ...

  10. 反射_Class对象功能_获取Constructor-反射_Class对象功能_获取Method

    反射_Class对象功能_获取Constructor Constructor<?>[] getConstructors() Constructor<T> getConstruc ...