hdu 6434 Count (欧拉函数)
T<=1e5, n<=2e7
978
438
233
666
38951
11065
89963
$$$$$$
\begin{align}
\text{原式}&= \sum_{i=1}^{n} \sum_{j=1}^{i-1}{ [gcd(i + j, i - j) = 1]}\\
&= \sum_{i=1}^{n} \sum_{j=1}^{i-1}{[gcd(2j, i - j) = 1]}\\
&= \sum_{j=1}^{n-1} \sum_{i=j+1}^{n}{[gcd(2j, i-j) = 1]}\\
&= \sum_{j=1}^{n-1} \sum_{i=1}^{j-1}{[gcd(2j, i) = 1]}
\end{align}
$$$$$$
注意到$$$\sum_{j=1}^{n-1} \sum_{i=1}^{j-1}$$$其实是在二维平面上三角形的区域内求和,于是进一步改写为:
$$$$$$
\sum_{i,j}^{i+j\le n}{[gcd(2j, i) = 1]}
$$$$$$
$$$$$$
\begin{align}
\text{令: }& f(n)=\sum_{i,j}^{i+j\le n}{[gcd(2j, i) = 1]}\\
& g(n)=f(n)-f(n-1)=\sum_{i,j}^{i+j=n}{[gcd(2j, i) = 1]}
\end{align}
$$$$$$
注意到当$$$i+j=n$$$时,代入$$$j=n-i$$$,可以消掉$$$j$$$,并利用gcd的性质,可以进一步简化$$$g(n)$$$:
$$$$$$
\begin{align}
g(n)&=\sum_{i=1}^{n-1}{[gcd(2n-2i, i) = 1]}\\
&=\sum_{i=1}^{n-1}{[gcd(2n, i) = 1]}
\end{align}
$$$$$$
所以接下来的问题就是,求$$$[1, n-1]$$$内,与$$$2n$$$互质的数有多少个。
这个问题可以继续简化,假设在$$$[1,n-1]$$$范围内,有$$$a_1,a_2,a_3,...a_p$$$与$$$2n$$$互质,那么根据gcd的性质,在$$$[n, 2n-1]$$$的范围内,相应的有$$$2n-a_1,2n-a_2,2n-a_3,...,2n-a_p$$$与$$$2n$$$互质。也就是说,两个范围内与$$$2n$$$互质的数是一样多的,所以结果很简单$$$g(n)$$$就是$$$\varphi(2n)$$$的一半,$$$g(n)=\varphi(2n)/2$$$。
$$$g(n)$$$已经不能再化简了,接下来再来看$$$f(n)$$$就容易多了,根据$$$f(n)$$$的递推式$$$g(n)=f(n)-f(n-1)$$$,很容易发现
$$$$$$
\begin{align}
f(n) &=\sum_{i=1}^{n}g(n) \\
& =\sum_{i=1}^{n}{\varphi(2n)/2}\\
& =\frac{\sum_{i=1}^{n}{\varphi(2n)}}{2}
\end{align}
$$$$$$
所以只需要对欧拉函数进行打表,并求$$$\varphi(2n)$$$的前缀和,就能知道任何的$$$f(n)$$$。
但是做到这还可以继续优化,这道题的n是2e7,但是却需要对前4e7项欧拉函数打表。可以这样优化一下空间:打表发现,欧拉函数满足下面的性质:
$$$$$$\varphi(2n)=
\begin{cases}
\varphi(n), & \text{n是奇数}\\[2ex]
2\varphi(n), & \text{n是偶数}
\end{cases}
$$$$$$
所以可以将$$$f(n)$$$改为:
$$$$$$
\begin{align}
f(n) &=\sum_{i=1}^{n}{\frac{(2-i\&1)\varphi(n)}{2}}\\
&=\sum_{i=1}^{n}{\frac{\varphi(n)}{1+i\&1}}
\end{align}
$$$$$$
至此,只需要求出$$$\varphi(i)$$$的前2e7项,并求出上面的前缀和,就能在$$$O(nlogn)$$$求出答案。需要注意的是,前缀和需要用long long保存。另外有一点就是,打表4e7项欧拉函数可能会超时,原因在于板子的效率问题,改用效率更高的欧拉函数打表的板子就不存在超时的问题了(不要问我是怎么知道的)。
- #include<stdio.h>
- typedef long long LL;
- #define maxn 20000000
- int p[maxn+];
- LL arr[maxn+];
- int prepare(){
- int i,j;
- //打表欧拉函数
- for(i=; i<=maxn; i++)
- p[i]=i;
- for(i=; i<=maxn; i+=)
- p[i]/=;
- for(i=; i<=maxn; i+=)
- if(p[i]==i){
- for(j=i; j<=maxn; j+=i)
- p[j]=p[j]/i*(i-);
- }
- /*把规模从2n缩减到n的原因
- phi(2*n)= phi(n) n奇数
- 2*phi(n) n偶数
- arr[n] =phi(2)/2+phi(4)/2+...phi(2*n)/?
- =phi(1)/2+phi(2)+...phi(n)/?
- */
- arr[]=p[]/;
- for(int i=;i<=;++i){//求前缀和
- arr[i]=arr[i-]+p[i]/((i&)+);
- }
- }
- int main(){
- prepare();
- int kase,n;
- for(scanf("%d",&kase);kase;--kase){
- scanf("%d",&n);
- printf("%lld\n",arr[n]);
- }
- }
hdu 6434 Count (欧拉函数)的更多相关文章
- Problem I. Count - HDU - 6434(欧拉函数)
题意 给一个\(n\),计算 \[\sum_{i=1}^{n}\sum_{j=1}^{i-1}[gcd(i + j, i - j) = 1]\] 题解 令\(a = i - j\) 要求 \[\sum ...
- HDU 2824 简单欧拉函数
1.HDU 2824 The Euler function 2.链接:http://acm.hdu.edu.cn/showproblem.php?pid=2824 3.总结:欧拉函数 题意:求(a ...
- HDU 1695 GCD 欧拉函数+容斥定理 || 莫比乌斯反演
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 2588 GCD (欧拉函数)
GCD Time Limit: 1000MS Memory Limit: 32768KB 64bit IO Format: %I64d & %I64u Submit Status De ...
- HDU 1695 GCD 欧拉函数+容斥定理
输入a b c d k求有多少对x y 使得x在a-b区间 y在c-d区间 gcd(x, y) = k 此外a和c一定是1 由于gcd(x, y) == k 将b和d都除以k 题目转化为1到b/k 和 ...
- HDU 1695 GCD (欧拉函数,容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submis ...
- hdu 1695 GCD (欧拉函数+容斥原理)
GCD Time Limit: 6000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submiss ...
- HDU 3501【欧拉函数拓展】
欧拉函数 欧拉函数是指:对于一个正整数n,小于n且和n互质的正整数(包括1)的个数,记作φ(n) . 通式:φ(x)=x*(1-1/p1)(1-1/p2)(1-1/p3)*(1-1/p4)-..(1- ...
- GuGuFishtion HDU - 6390 (欧拉函数,容斥)
GuGuFishtion \[ Time Limit: 1500 ms\quad Memory Limit: 65536 kB \] 题意 给出定义\(Gu(a, b) = \frac{\phi(ab ...
随机推荐
- 微信小程序解决地图上的层级关系
在有带地图的手机页面上,view无法显示在地图上方,所以,在wxml中,使用: <cover-view></cover-view> 能使view显示在地图上 注: 在该标签内部 ...
- 【LG4309】【BZOJ3173】[TJOI2013]最长上升子序列
[LG4309][BZOJ3173][TJOI2013]最长上升子序列 题面 洛谷 BZOJ 题解 插入操作显然用平衡树就行了 然后因为后面的插入对前面的操作无影响 就直接在插入完的序列上用树状数组求 ...
- 使用iChecker的注意事项
1. 要先引用jquery 2. ichecker分好多主题,每个主题带好几种颜色,在配置的时候最好指定一下. 比如引入了square主题的blue颜色演示,配置项中checkboxClass就写ic ...
- idea css文件不识别的问题的解决方案
可以看到 progressBar不识别 发现仅仅是这一个文件名不识别 所以换一个任意别的文件名即可识别
- SOAPUI参数中xml中CDATA包含问题
<![CDATA[ <Request> <CardNo>000002629518</CardNo> <SecrityNo/> <BankTr ...
- 基于Spring的最简单的定时任务实现与配置(三)--番外篇 cron表达式的相关内容
本来这篇文章是会跟本系列的前两篇文章一起发布的.但是,昨天在找资料总结的时候遇到了一点意外,就延后了一些. 本篇的内容主要参考了 这篇博文:http://www.cnblogs.com/junrong ...
- 自己做的一个固定大小对象内存池,效率大概为原始的new/delete的2倍
提升不高,不过好处是可以多次申请小对象,一次释放.(只适应于无动态申请资源的class) vs2012测试情况如下: // CHchFixLenMemPool.h #pragma once #ifnd ...
- Python接口测试实战2 - 使用Python发送请求
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- Web性能测试篇:AB 压力测试
1. 压力测试的概念\定义 1.这段话是给刚接触\学习性能测试知识的初学者,在实际工作中都会接触到性能测试.压力测试.负载测试等专业名词也容易混淆,下面带大家熟悉下这到底是怎么定义: 1.1.性能测试 ...
- Vue 项目在其他电脑 npm run dev 运行报错的解决方法
一个 Vue 项目从一台电脑上传到 github 上之后,再另外一台电脑上 git clone .并使用 npm run dev 或 npm run start 发生以下报错的解决方法. 报错原因 ...