大意: 给定$n(n\le 10^{21})$, 求$\sum\limits_{i=1}^n gcd(\lfloor\sqrt[3]{i}\rfloor,i)\mod 998244353$

首先立方根可以分块, 转化为

$\sum\limits_{i=1}^{\lfloor\sqrt[3]{n}\rfloor}\sum\limits_{j=i^3}^{min(n,(i+1)^3-1)}gcd(i,j)=\sum\limits_{i=\lfloor\sqrt[3]{n}\rfloor^3}^ngcd(r+1,i)+\sum\limits_{i=1}^r\sum\limits_{j=i^3}^{(i+1)^3-1}gcd(i,j)$

然后有$\sum\limits_{i=1}^n gcd(S,i)=\sum\limits_{d|S}\lfloor\frac{n}{d}\rfloor\varphi(d)$, 所以可以得到

$\begin{align}\sum\limits_{i=1}^r\sum\limits_{j=i^3}^{(i+1)^3-1}gcd(i,j) &=\sum\limits_{i=1}^r\sum\limits_{d|i}(\lfloor\frac{(i+1)^3-1}{d}\rfloor-\lfloor\frac{i^3-1}{d}\rfloor)\varphi(d) \notag \\ &= \sum\limits_{d=1}^r\sum\limits_{i=1}^{\lfloor\frac{r}{d}\rfloor}(\lfloor\frac{(di+1)^3-1}{d}\rfloor-\lfloor\frac{(di)^3-1}{d}\rfloor) \notag \\ &= \sum\limits_{d=1}^r\varphi(d)\sum\limits_{i=1}^{\lfloor\frac{r}{d}\rfloor}(3di^2+3i+1)\notag\end{align}$

可以$O(\sqrt[3]{n})$求出.

#include <iostream>
#include <cmath>
#include <cstdio>
#define REP(i,a,n) for(int i=a;i<=n;++i)
using namespace std;
typedef long long ll;
typedef __int128 i128;
template <class T>
void read(T &x) {
static char ch;static bool neg;
for(ch=neg=0;ch<'0' || '9'<ch;neg|=ch=='-',ch=getchar());
for(x=0;'0'<=ch && ch<='9';(x*=10)+=ch-'0',ch=getchar());
x=neg?-x:x;
}
const int P = 998244353, N = 1e7+10;
int phi[N], p[N], cnt, vis[N];
void init() {
phi[1] = 1;
for (int i=2; i<N; ++i) {
if (!vis[i]) p[++cnt]=i,phi[i]=i-1;
for (int j=1,t; j<=cnt&&i*p[j]<N; ++j) {
vis[t=i*p[j]] = 1;
if (i%p[j]==0) {phi[t]=phi[i]*p[j];break;}
phi[t]=phi[i]*phi[p[j]];
}
}
}
int gcd(int x, int y) {return y?gcd(y,x%y):x;}
int S_0(int x) {return x;}
int S_1(int x) {return (ll)x*(x+1)/2%P;}
int S_2(int x) {return (ll)x*(x+1)%(6ll*P)*(2*x+1)/6%P;}
int calc(int s, i128 l, i128 r) {
int ans = 0, mx = sqrt(s+0.5);
--l;
REP(d,1,mx) if (s%d==0) {
ans = (ans+(r/d-l/d)*phi[d])%P;
int t = s/d;
if (t!=d) ans = (ans+(r/t-l/t)*phi[t])%P;
}
return ans;
} int main() {
init();
int t;
scanf("%d", &t);
while (t--) {
i128 n;
read(n);
int r = 0;
while ((i128)(r+2)*(r+2)*(r+2)-1<=n) ++r;
int ans = calc(r+1,(i128)(r+1)*(r+1)*(r+1),n);
REP(d,1,r) {
int ret = (S_0(r/d)+3ll*S_1(r/d)+3ll*d*S_2(r/d))%P;
ans = (ans+(ll)ret*phi[d])%P;
}
if (ans<0) ans += P;
printf("%d\n", ans);
}
}

2019杭电多校一 K. Function (数论)的更多相关文章

  1. 2019杭电多校第二场hdu6601 Keen On Everything But Triangle

    Keen On Everything But Triangle 题目传送门 解题思路 利用主席树求区间第k小,先求区间内最大的值,再求第二大,第三大--直到找到连续的三个数可以构成一个三角形.因为对于 ...

  2. 2019杭电多校第二场hdu6602 Longest Subarray(线段树)

    Longest Subarray 题目传送门 解题思路 本题求一个最大的子区间,满足区间内的数字要么出现次数大于等于k次,要么没出现过.给定区间内的数字范围是1~c. 如果r为右边界,对于一种数字x, ...

  3. Rikka with Game[技巧]----2019 杭电多校第九场:1005

      Rikka with Game Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Othe ...

  4. 2019杭电多校 hdu6659 Acesrc and Good Numbers

    http://acm.hdu.edu.cn/showproblem.php?pid=6659 题意:给你d,x,让求满足f(d,n)=n的最大n(n<=x),其中f(d,n)表示数字d在从1到n ...

  5. 2019杭电多校三 C. Yukikaze and Demons (点分治)

    大意: 给定树, 每个点有一个十进制数位, 求有多少条路径组成的十进制数被$k$整除. 点分治, 可以参考CF715C, 转化为求$10^a x+b\equiv 0(mod\space k)$的$x$ ...

  6. 2019杭电多校一 C. Milk (dp)

    大意: $n*m$棋盘, 初始位置$(1,1)$, 横坐标为$\frac{m+1}{2}$时可以向下走, 否则只能左右走, 每走一步花费$1$秒. 有$k$管奶, 第$i$罐位置$(r_i,c_i)$ ...

  7. 2019杭电多校二 F. Fantastic Magic Cube (FWT)

    大意: 给定$N^3$立方体, 每个单位立方体权值为三个坐标异或, 每次沿坐标轴切一刀, 得分为两半内权值和的乘积, 求切成$n^3$块的最大得分. 可以发现得分与切法无关, 假设每个点权值为$a_i ...

  8. 2019杭电多校二 L. Longest Subarray (线段树)

    大意: 给定序列$a$, 元素范围$[1,C]$, 求一个最长子序列, 满足每个元素要么不出现, 要么出现次数$\le K$. 枚举右端点, 考虑左端点合法的位置. 显然一定是$C$种颜色合法位置的交 ...

  9. 2019杭电多校一 A. Blank (dp)

    大意: 长为$n$的数组, 每个位置范围$[0,3]$, $m$个限制$(l,r,x)$表示$[l,r]$内有$x$种数, 求方案数. 维护每个数字最后一次出现位置, 暴力$DP$ 实现时有个技巧是把 ...

随机推荐

  1. 【转】Eclipse MAT内存分析工具(Memory Analyzer Tool)

    Eclipse MAT内存分析工具(Memory Analyzer Tool) MAT内存分析工具# MAT是Memory Analyzer的简称,它是一款功能强大的Java堆内存分析器.可以用于查找 ...

  2. node.js 文件下载

    //下载参数 var http = require("http"); var fs = require("fs"); var path = require(&q ...

  3. Java--常用API介绍

    Scanner类--键盘输入,室友起来三个步骤: 第一,导包:import java.util.Scanner 第二,创建:Scanner sc = new Scanner(System.in) 第三 ...

  4. 关于Vue.use()详解

    问题 相信很多人在用Vue使用别人的组件时,会用到 Vue.use() .例如:Vue.use(VueRouter).Vue.use(MintUI).但是用 axios时,就不需要用 Vue.use( ...

  5. OpenJudge计算概论-分离整数的各个数位

    /*================================================================= 分离整数的各个数位 总时间限制: 1000ms 内存限制: 65 ...

  6. 创建Bitmap之BitmapFactory

    package com.loaderman.customviewdemo; import android.app.Activity; import android.graphics.Bitmap; i ...

  7. API的查看

    步骤: 1. 双击打开API 2. 点击显示, 找到索引 3. 输入要查找的类名 , 敲击Enter两次 4. 看该类所属的包, java.lang包下的类,在使用的时候不需要导包 ,其他的都需要导包 ...

  8. ISO/IEC 9899:2011 条款5——5.1.2 执行环境

    5.1.2 执行环境 1.定义了两个执行环境:独立式(freestanding)以及宿主的(hosted).在这两种情况下,当一个派定的C函数被执行环境调用时,程序就启动.所有具有静态存储周期的对象应 ...

  9. zblog上传安装主题插件不成功的原因和解决办法

    最近有不少zblog用户反映在后台上传安装主题或者插件的时候出现了问题.本文就来尝试说明下这类问题的原因和解决办法. 首先来说说zblog主题或者插件的安装方法,一共有三种方式: 第一种是直接在网站后 ...

  10. Greenwich.SR2版本的Spring Cloud Zuul实例

    网关作为对外服务,在微服务架构中是一个很重要的组件,主要体现在动态路由和接入鉴权这两个功能上.现在我们通过Spring Cloud Zuul来实现对之前a-feign-client(参见Greenwi ...