$f(m)=\sum\limits_{i=1}^{m-1}\sum\limits_{j=1}^{m-1}[(ij,m) \ne m]$,$g(n)=\sum\limits_{m|n}f(m)$,$1 \le n \le 10^9$,求$g(n)$模$2^{64}$。

要求为$i j ∤ m$,说明$ij$不为$m$的倍数,但是可以有公共因子,直接求很麻烦,不如先反着来求不符合的,最后再减掉。然后就是化式子,枚举一个数$(m, i)=d$,则另一个数满足$\frac{m}{d}|j$,二者各自有$\varphi(\frac{m}{d})$和$d$个数量,继续化简,之后可以观察到右半式就是某很经典的欧拉函数的结论,然后预处理素数,素因子分解计算下贡献,最后左右两个半式相减就行了。

\begin{eqnarray*} g(n) &=& \sum\limits_{m|n}(m^2-\sum\limits_{i=1}^{m-1}\sum\limits_{j=1}^{m-1}[(ij,m) = m]) \newline &=&\sum\limits_{m|n} {m^2} - \sum\limits_{m|n} \sum\limits_{d|m} d\varphi \left( \frac{m}{d} \right) \newline &=& \sum\limits_{m|n} {m^2} - \sum\limits_{d|n}d {\sum\limits_{\frac{m}{d}|\frac{n}{d}} {\varphi \left( {\frac{m}{d}} \right)} } \newline &=& \sum\limits_{m|n} {m^2} - \sum\limits_{d|n}{d \frac{n}{d}} \newline &=& \sum\limits_{m|n} {m^2} - n \sum\limits_{d|n}{1} = \sum\limits_{m|n} {m^2} - n \tau(n) \end{eqnarray*}

还有另外一种方法就是直接利用积性函数的性质,再用欧拉函数化简。得到的最后式子是一样的。

/** @Date    : 2017-10-20 14:18:28
* @FileName: HDU 5528 反演.cppc
* @Platform: Windows
* @Author : Lweleth (SoungEarlf@gmail.com)
* @Link : https://github.com/
* @Version : $Id$
*/
#include <bits/stdc++.h>
#define LL unsigned long long
#define PII pair<int ,int>
#define MP(x, y) make_pair((x),(y))
#define fi first
#define se second
#define PB(x) push_back((x))
#define MMG(x) memset((x), -1,sizeof(x))
#define MMF(x) memset((x),0,sizeof(x))
#define MMI(x) memset((x), INF, sizeof(x))
using namespace std; const int INF = 0x3f3f3f3f;
const int N = 5e4+20;
const double eps = 1e-8; LL pri[N];
bool vis[N];
int c = 0; void prime()
{
MMF(vis);
for(int i = 2; i < N; i++)
{
if(!vis[i]) pri[c++] = i;
for(int j = 0; j < c && i * pri[j] < N; j++)
{
vis[i * pri[j]] = 1;
if(i % pri[j] == 0) break;
}
}
} int main()
{
prime();
int T;
scanf("%d", &T);
while(T--)
{
LL n;
scanf("%llu", &n);
LL t = n;
LL sum = 1ULL, dis = 1ULL;
for(int i = 0; i < c && pri[i] * pri[i] <= t; i++)
{
if(t % pri[i] == 0)
{
LL cnt = 1;
LL tmp = 1ULL;
LL k = 1ULL;
while(t % pri[i] == 0)
t /= pri[i], cnt++; for(int j = 0; j < cnt - 1; j++)
{
tmp *= pri[i];
k += (LL)tmp * tmp;// ()* m^2
}
sum *= k;
dis *= cnt;
}
}
if(t > 1)
{
sum *= t * t + 1;
dis *= 2ULL;
}
dis *= n;
printf("%llu\n", sum - dis);
}
return 0;
}

HDU 5528 反演的更多相关文章

  1. 2015ACM/ICPC亚洲区长春站 B hdu 5528 Count a * b

    Count a * b Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 262144/262144 K (Java/Others)Tot ...

  2. HDU 5528 Count a * b 欧拉函数

    题意: 定义函数\(f(n)\)为\(i \cdot j \not\equiv 0 \; (mod \; n)\)的数对\((i,j)\)的个数\((0 \leq i,j \leq n)\) \(g( ...

  3. HDU 5514 Frogs 欧拉函数

    题意: 有\(m(1 \leq m \leq 10^9)\)个石子排成一圈,编号分别为\(0,1,2 \cdots m-1\). 现在在\(0\)号石头上有\(n(1 \leq n \leq 10^4 ...

  4. HDU 2841 Visible Trees(莫比乌斯反演)

    题目连接:http://acm.hdu.edu.cn/showproblem.php?pid=2841 题意:给n*m的矩阵(从(1,1)开始编号)格子,每个格子有一棵树,人站在(0,0)的位置,求可 ...

  5. HDU 5321 Beautiful Set (莫比乌斯反演 + 逆元 + 组合数学)

    题意:给定一个 n 个数的集合,然后让你求两个值, 1.是将这个集合的数进行全排列后的每个区间的gcd之和. 2.是求这个集合的所有的子集的gcd乘以子集大小的和. 析:对于先求出len,len[i] ...

  6. HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演

    GCD Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...

  7. HDU 2841 容斥 或 反演

    $n,m <= 1e5$ ,$i<=n$,$j<=m$,求$(i⊥j)$对数 /** @Date : 2017-09-26 23:01:05 * @FileName: HDU 284 ...

  8. hdu 4676 Sum Of Gcd 莫队+phi反演

    Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...

  9. HDU 6134 Battlestation Operational(莫比乌斯反演)

    [题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=6134 [题目大意] 求$\sum_{i=1}^{n}{\sum_{j=1}^{i}\lceil{\ ...

随机推荐

  1. TensorFlow 实现线性回归

    1.生成高斯分布的随机数 导入numpy模块,通过numpy模块内的方法生成一组在方程 y = 2 * x + 3 周围小幅波动的随机坐标.代码如下: import numpy as np impor ...

  2. IOS免越狱虚拟定位修改工具共享 Jocation

    Jocation IOS虚拟定位修改器 具体使用方法可以按照 location cleaned软件相同的操作. 主要是因为本人有一部 IphoneX 和Iphone Xs Max 网上的locatio ...

  3. jumpserver部署

    1.部署环境.安装依赖包 # yum install git python-pip mysql-devel gcc automake autoconf python-devel vim sshpass ...

  4. 散列(Hash)表入门

    一.概述 以 Key-Value 的形式进行数据存取的映射(map)结构 简单理解:用最基本的向量(数组)作为底层物理存储结构,通过适当的散列函数在词条的关键码与向量单元的秩(下标)之间建立映射关系 ...

  5. PAT甲题题解-1072. Gas Station (30)-dijkstra最短路

    题意:从m个加油站里面选取1个站点,使得其离住宅的最近距离mindis尽可能地远,并且离所有住宅的距离都在服务范围ds之内.如果有很多相同mindis的加油站,输出距所有住宅平均距离最小的那个.如果平 ...

  6. Java实验报告(实验二)

    课程:Java程序设计          班级: 1351 姓名:王玮怡                学号:20135116 成绩:             指导教师:娄嘉鹏       实验日期: ...

  7. simhash-- 一种文档去重的算法

    最早看数学之美的时候,书中就提到了这个算法,当时没有做过相关地工作,没什么具体的印象.一年前转岗时面试时别人提到了这个算法,知道了simhash可以用来解决网页等海量数据的去重问题,很高效. 然后自己 ...

  8. 制作U盘启动盘并重装系统

    进入网站 http://www.msdn.hk/6/209/ 在列表中选择自己需要的系统,比如win7_64,则可以选择下图系统:Windows 7 Ultimate with Service Pac ...

  9. 什么是Asp.net Core?和 .net core有什么区别?

    为什么要写这篇文章 写这篇文章有两个原因,第一个是因为新站点创建出来后一直空置着,所以写一篇文章放在这里.第二就是因为近来在做一些基于Asp.net core平台的项目开发,也遇到了一些问题,正好趁此 ...

  10. [转帖]PG里面的Citus简介----找时间学习一下.

    1. Citus是什么 是PostgreSQL的扩展,可以同PG一同安装,之后通过SQL命令加入到数据库中. [相关操作] ? 1 2 #创建Citus扩展: CREATE EXTENSION cit ...