题目

由\(1,2,\dots,n-1,n\)组成的序列中有多少个子序列是等比数列\((n\leq 5*10^{17})\)


分析

分类讨论,先设公比为\(q=\frac{i}{j}[gcd(i,j)==1,i>j]\)

首先长度为1或2的有\(\frac{n(n+1)}{2}\)个

考虑长度大于3的可以暴力处理,枚举长度和分子\(i\)

公比不同的等比数列有\(\varphi(i)\)个,首项一共有\(\lfloor\frac{n}{i^{len-1}}\rfloor\)中情况

那么

\[ans=\sum_{i=2}^n\sum_{len=4}\varphi(i)\lfloor\frac{n}{i^{len-1}}\rfloor
\]

长度等于3同理可得

\[ans=\sum_{i=2}^n\varphi(i)\lfloor\frac{n}{i^2}\rfloor
\]

整除分块+杜教筛,就不会TLE了

怎么用杜教筛??套模板就可以了


代码

#include <cstdio>
#include <cctype>
#include <cmath>
#include <map>
#define rr register
using namespace std;
const int N=40000011,mod=998244353;
int phi[N],prime[N],Cnt; bool v[N];
typedef long long lll; map<int,int>uk;
inline signed mo(int x,int y){return x+y>=mod?x+y-mod:x+y;}
inline signed od(int x,int y){return x<y?x+mod-y:x-y;}
inline void Pro(int n){
phi[1]=1;
for (rr int i=2;i<=n;++i){
if (!v[i]) prime[++Cnt]=i,phi[i]=i-1;
for (rr int j=1;j<=Cnt&&prime[j]<=n/i;++j){
v[i*prime[j]]=1,phi[i*prime[j]]=phi[i]*(prime[j]-1);
if (i%prime[j]==0) {
phi[i*prime[j]]+=phi[i];
break;
}
}
}
for (rr int i=2;i<=n;++i) phi[i]=mo(phi[i-1],phi[i]);
}
inline signed sphi(int n){
if (n<=N-11) return phi[n];
if (uk.find(n)!=uk.end()) return uk[n];
rr int ans=(1ll*n*(n+1)>>1)%mod;
for (rr int l=2,r;l<=n;l=r+1)
r=n/(n/l),ans=od(ans,1ll*sphi(n/l)*(r-l+1)%mod);
return ans;
}
signed main(){
Pro(N-11); rr int Test;
for (scanf("%d",&Test);Test;--Test){
rr lll n,t; scanf("%lld",&n);
rr int ans=((n%mod)*((n%mod)+1)>>1)%mod;
rr int t1=sqrt(n),t2=pow(n,1.0/3);
for (rr int l=2,r,w;l<=t1;l=r+1)
t=n/l/l,r=sqrt(n/t),ans=mo(ans,t*od(sphi(r),sphi(l-1))%mod);
for (rr int i=2;i<=t2;++i)
for (rr lll t=1ll*i*i*i;;t*=i){
ans=mo(ans,(n/t)*od(phi[i],phi[i-1])%mod);
if (t>n/i) break;
}
printf("%d\n",ans);
}
return 0;
}

#杜教筛,欧拉函数,整除分块#HDU 6683 Rikka with Geometric Sequen的更多相关文章

  1. 51Nod.1237.最大公约数之和 V3(莫比乌斯反演 杜教筛 欧拉函数)

    题目链接 \(Description\) \(n\leq 10^{10}\),求 \[\sum_{i=1}^n\sum_{j=1}^ngcd(i,j)\ mod\ (1e9+7)\] \(Soluti ...

  2. luogu P3768 简单的数学题 杜教筛 + 欧拉反演 + 逆元

    求 $\sum_{i=1}^{n}\sum_{j=1}^{n}ijgcd(i,j)$   考虑欧拉反演: $\sum_{d|n}\varphi(d)=n$   $\Rightarrow \sum_{i ...

  3. 2019年南京网络赛E题K Sum(莫比乌斯反演+杜教筛+欧拉降幂)

    目录 题目链接 思路 代码 题目链接 传送门 思路 首先我们将原式化简: \[ \begin{aligned} &\sum\limits_{l_1=1}^{n}\sum\limits_{l_2 ...

  4. The Euler function(线性筛欧拉函数)

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  5. 素数的线性筛 && 欧拉函数

    O(n) 筛选素数 #include<bits/stdc++.h> using namespace std; const int M = 1e6 + 10 ; int mindiv[M] ...

  6. HDU5780 gcd (BestCoder Round #85 E) 欧拉函数预处理——分块优化

    分析(官方题解): 一点感想: 首先上面那个等式成立,然后就是求枚举gcd算贡献就好了,枚举gcd当时赛场上写了一发O(nlogn)的反演,写完过了样例,想交发现结束了 吐槽自己手速慢,但是发了题解后 ...

  7. BZOJ 2818 GCD 素数筛+欧拉函数+前缀和

    题目链接:https://www.lydsy.com/JudgeOnline/problem.php?id=2818 题意:给定整数N,求1<=x,y<=n且Gcd(x,y)为素数的数对( ...

  8. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

  9. 积性函数&线性筛&欧拉函数&莫比乌斯函数&因数个数&约数个数和

    只会搬运YL巨巨的博客 积性函数 定义 积性函数:对于任意互质的整数a和b有性质f(ab)=f(a)f(b)的数论函数. 完全积性函数:对于任意整数a和b有性质f(ab)=f(a)f(b)的数论函数 ...

  10. Farey Sequence (素筛欧拉函数/水)题解

    The Farey Sequence Fn for any integer n with n >= 2 is the set of irreducible rational numbers a/ ...

随机推荐

  1. Acrobat 教程

    https://helpx.adobe.com/cn/acrobat/using/pdf-form-field-properties.html

  2. 【Azure Entra ID】如何在中国区获取用户 StrongAuthenticationUserDetails 和 StrongAuthenticationMethods 信息

    问题描述 如何在中国区获取用户 StrongAuthenticationUserDetails 和 StrongAuthenticationMethods 信息 ? StrongAuthenticat ...

  3. 【Azure Redis 缓存】Azure Cache for Redis 服务的导出RDB文件无法在自建的Redis服务中导入

    问题描述 使用微软云的Redis服务,导出它的RDB文件后,想把数据恢复到本地自建的Redis服务中,发现出现如下错误: 15000:S 21 Jun 08:14:11.199 * Retrying ...

  4. 一文讲明白Java中线程与进程、并发与与并行、同步与异步

    写在开头 ok,everybody,在过去的两周内,我们大体上讲完了Java的集合,在最后我们探讨了关于HashMap线程不安全的原因,又提出了ConcurrentHashMap这个线程安全的集合解决 ...

  5. 开源短信项目 platform-sms 发布了新版本 0.5.0

    Github : https://github.com/makemyownlife/platform-sms 短信服务 platform-sms 0.5.0 发布 ,新的版本做了非常多的优化和改进. ...

  6. C++ //类模板分文件编写问题及解决 //第一中解决方式 直接包含源文件 //第二种解决方法 将.h 和 cpp的内容写到一起,将后缀改为.hpp文件

    1 //第一种方式被注释 2 //未被注释是第二种方式 3 //类模板分文件编写问题及解决 4 5 6 #include <iostream> 7 #include <string& ...

  7. minio通过docker方式部署

    MinIO 是在 GNU Affero 通用公共许可证 v3.0 下发布的高性能对象存储. 它是与 Amazon S3 云存储服务兼容的 API 官方文档http://docs.minio.org.c ...

  8. Java核心之细说泛型

    泛型是什么? 等你使用java逐渐深入以后会了解或逐步使用到Java泛型.Java 中的泛型是 JDK 5 中引入的功能之一."Java 泛型 "是一个技术术语,表示一组与定义和使 ...

  9. Linux 系统进程管理

    Linux 系统进程管理 目录 Linux 系统进程管理 一.进程的概述 1.1 什么是进程? 1.2 进程和程序的区别 1.3 进程的生命周期 1.4 进程的运行过程 二. 静态显示进程状态-ps ...

  10. 对象遍历 Object.keys(obj).forEach(name=> {})

    Object.keys(props).forEach(name => { watch[name] = function (value) { this.columnConfig.update(na ...