LG P3653 小清新数学题
\(\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 小清新数学题的更多相关文章
- Miller Rabin 详解 && 小清新数学题题解
在做这道题之前,我们首先来尝试签到题. 签到题 我们定义一个函数:\(qiandao(x)\) 为小于等于 x 的数中与 x 不互质的数的个数.要求 \(\sum\limits _{i=l}^r qi ...
- 三石推荐!把 Bootstrap 小清新带回家!
无敌传送门:http://fineui.com/demo_pro/default.aspx?theme=bootstrap1&menu=accordion 喜欢就来赞一个! 把麻烦留给三石 ...
- 小清新的jQuery ck-slide 图片轮播
ck_slide 是一款小清新的jQuery 幻灯片插件,它非常小巧,压缩后仅 3KB,基本功能可以满足.它支持淡入淡出/左右滚动.箭头/圆点控制.自动播放. 在线实例 默认(淡入淡出) 左右滚动 自 ...
- easyui小清新俺也晒晒 视频管理软件bs项目
easyui小清新俺也晒晒 视频管理软件bs项目 针对设备的管理软件 这是我听到最多的话.视频管理软件bs项目.easyui 好与坏我不去评价 项目做了好几个月,其实代码看来也没用多少,但是做需求,时 ...
- Photoshop调出外景婚片蓝色小清新艺术效果
春季婚纱旺季来了,好多童鞋给我抱怨说客片太难转色了,春天的小清新感都转不了,其实并不难,运用好互补色来进行加减色,能很快调整好照片的偏色,互补色也可称为对比色,后期调色的加也可称为减,如加蓝=减黄.加 ...
- LuoguP3674 小清新人渣的本愿 && BZOJ4810: [Ynoi2017]由乃的玉米田
题目地址 小清新人渣的本愿 [Ynoi2017]由乃的玉米田 所以这两题也就输出不一样而已 题解 这种lxl的题还是没修改操作的题基本就是莫队 分开考虑每个询问 1.减法 \(a-b=x⇒a=b+x\ ...
- P3674 小清新人渣的本愿
P3674 小清新人渣的本愿 一道妙不可言的题啊,,, 一看就知道是个莫队 考虑求答案 1号操作就是个大bitset,动态维护当前的bitset \(S\),把能取哪些值都搞出来,只要\(S\ and ...
- 【Luogu3676】小清新数据结构题(动态点分治)
[Luogu3676]小清新数据结构题(动态点分治) 题面 洛谷 题解 先扯远点,这题我第一次看的时候觉得是一个树链剖分+线段树维护. 做法大概是这样: 我们先以任意一个点为根,把当前点看成是一棵有根 ...
- 【洛谷3674】小清新人渣的本愿(莫队,bitset)
[洛谷3674]小清新人渣的本愿(莫队,bitset) 题面 洛谷,自己去看去,太长了 题解 很显然的莫队. 但是怎么查询那几个询问. 对于询问乘积,显然可以暴力枚举因数(反正加起来也是\(O(n\s ...
- 用RecyclerView做一个小清新的Gallery效果
一.简介 RecyclerView现在已经是越来越强大,且不说已经被大家用到滚瓜烂熟的代替ListView的基础功能,现在RecyclerView还可以取代ViewPager实现Banner效果,当然 ...
随机推荐
- vue3响应式原理以及ref和reactive区别还有vue2/3生命周期的对比,第二天
前言: 前天我们学了 ref 和 reactive ,提到了响应式数据和 Proxy ,那我们今天就来了解一下,vue3 的响应式 在了解之前,先复习一下之前 vue2 的响应式原理 vue2 的响应 ...
- 【算法总结】【队列均LinkedList】栈和队列、双端队列的使用及案例
1.栈 初始化:Stack<E> stack = new Stack<>(); 出栈:stack.pop() 或 stack.remove(stack.size() - 1) ...
- 【Phoenix】简介、架构、存储、入门、常用表操作、表的映射方式、配置二级索引
一.Phoenix简介 1.定义 构建在 HBase 之上的开源 SQL 层 可以使用标准的 JDBC API 去建表, 插入数据和查询 HBase 中的数据 避免使用 HBase 的客户端 API ...
- java并发数据结构之CopyOnWriteArrayList
CopyOnWriteArrayList是一个线程安全的List实现,其在对对象进行读操作时,由于对象没有发生改变,因此不需要加锁,反之在对象进行增删等修改操作时,它会先复制一个对象副本,然后对副本进 ...
- gulp报错The following tasks did not complete
代码如下: //引用gulp模块 const gulp = require('gulp'); //使用gulp.task()建立任务 gulp.task('first', () => { con ...
- <三>function函数对象类型的应用示例
std::function是一组函数对象包装类的模板,实现了一个泛型的回调机制.function与函数指针比较相似,优点在于它允许用户在目标的实现上拥有更大的弹性,即目标既可以是普通函数,也可以是函数 ...
- django 之swagger配置与生成接口文档
swagger好处不多说,直接上配置步骤 1.安装swagger pip install django-rest-swagger 2.将swagger配置到setting.py文件中 3.在主url. ...
- Jmeter 函数助手之__UUID 生成唯一的标识符
在测试ws协议接口时,常常需要传入唯一标识符,jmeter 提供__UUID.__Random生成随机的字符串,两者区别为:__UUID生成的随机字符串不会重复,而__Random会重复 __UUID ...
- 解决RockyLinux和Centos Stream 9中firefox无法播放HTML视频问题
如题在测试两种centos后续系统时,发现firefox无法播放HTML视频问题.经过一番折腾找到了解决的办法,具体解决如下: 首先下载VLC $sudo yum install vlc 而后重启浏览 ...
- python实验报告(第11章)
实验11:使用Python操作数据库 一.实验目的和要求 1.学会数据库编程接口: 2.学会使用SQLite: 3.学会使用MySQL. 二.实验环境 软件版本:Python 3.10 64_bit ...