题意

给一个\(n\),计算

\[\sum_{i=1}^{n}\sum_{j=1}^{i-1}[gcd(i + j, i - j) = 1]
\]

题解

令\(a = i - j\)

要求

\[\sum_{i=1}^{n}\sum_{j=1}^{i-1}[gcd(i + j, i - j) = 1]
\]

即求

\[\sum_{i=1}^{n}\sum_{a=1}^{i-1}[gcd(2*i - a, a) = 1]
\]

根据\(gcd\)的性质,即

\[\sum_{i=1}^{n}\sum_{a=1}^{i-1}[gcd(2*i, a) = 1]
\]

所以要求的就是\(1\)到\(i-1\)中,与\(2*i\)互质的数的个数。

令\(sum[i]\)为\(i\)的欧拉函数\(\phi\)的前缀和。结论是,对于奇数,答案就是\(sum[i]/2\),对于偶数,答案是\(sum[i]\)。

与\(2*i\)互质的数的个数,和\(\phi(i)\)(与\(i\)互质的数的个数)有什么关系呢?

如果\(i\)是奇数,那么\(1\)到\(i-1\)中与\(i\)互质的所有数中的奇数,都与\(2*i\)互质。而且这些数中,奇数占一半(为什么?因为对于任何一个奇数,小于它的和它互质的数,是以\(k\)和\(n-k\)的形式成对出现的。这两个数必然一奇一偶)。

如果\(i\)是偶数,那么\(1\)到\(i-1\)中与\(i\)互质的所有数,都与\(2*i\)互质。

代码

  1. #include <cstdio>
  2. #include <cmath>
  3. #include <ctime>
  4. #include <algorithm>
  5. #include <iostream>
  6. #define FOPI freopen("in.txt", "r", stdin)
  7. #define FOPO freopen("out.txt", "w", stdout)
  8. using namespace std;
  9. typedef long long LL;
  10. const int maxn = 2e7 + 5;
  11. int phi[maxn], prime[maxn];
  12. LL sum[maxn];
  13. int tot = 0;
  14. void getPhi(int n)
  15. {
  16. for (int i = 2; i <= n; i++) phi[i] = 0;
  17. phi[1] = 1;
  18. for (int i = 2; i <= n; i++)
  19. {
  20. if (!prime[i])
  21. {
  22. prime[++tot] = i;
  23. phi[i] = i-1;
  24. }
  25. for (int j = 1; j <= tot; j++)
  26. {
  27. if (i*prime[j] > n) break;
  28. prime[i*prime[j]] = 1;
  29. if (i % prime[j] == 0)
  30. {
  31. phi[i*prime[j]] = prime[j] * phi[i];
  32. break;
  33. }
  34. else phi[i*prime[j]] = (prime[j]-1)*phi[i];
  35. }
  36. }
  37. }
  38. void init(int n)
  39. {
  40. getPhi(n);
  41. for (int i = 1; i <= n; i++)
  42. if (i % 2 == 1)
  43. sum[i] = sum[i-1] + phi[i] / 2;
  44. else
  45. sum[i] = sum[i-1] + phi[i];
  46. }
  47. int t, n;
  48. int main()
  49. {
  50. init(2e7);
  51. scanf("%d", &t);
  52. for (int ca = 1; ca <= t; ca++)
  53. {
  54. scanf("%d", &n);
  55. printf("%lld\n", sum[n]);
  56. }
  57. }

Problem I. Count - HDU - 6434(欧拉函数)的更多相关文章

  1. hdu 6390 欧拉函数+容斥(莫比乌斯函数) GuGuFishtion

    http://acm.hdu.edu.cn/showproblem.php?pid=6390 题意:求一个式子 题解:看题解,写代码 第一行就看不出来,后面的sigma公式也不会化简.mobius也不 ...

  2. hdu 2654(欧拉函数)

    Become A Hero Time Limit: 15000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  3. hdu 2824(欧拉函数)

    The Euler function Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Other ...

  4. hdu 1395(欧拉函数)

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  5. hdu 3307(欧拉函数+好题)

    Description has only two Sentences Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65536/327 ...

  6. 找新朋友 HDU - 1286 欧拉函数模板题

    题意: 求出来区间[1,n]内与n互质的数的数量 题解: 典型的欧拉函数应用,具体见这里:Relatives POJ - 2407 欧拉函数 代码: 1 #include<stdio.h> ...

  7. hdu 2824 欧拉函数 O(nlogn) 和O(n)

    裸题 O(nlogn): #include <cstdio> #include <iostream> #include <algorithm> using name ...

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

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

  9. hdu 1787(欧拉函数)

    GCD Again Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total S ...

随机推荐

  1. electron 开发记录

    判断是否开发环境 安装 electron-is-dev npm install electron-is-dev // main.js const isDev = require('electron-i ...

  2. Day3上

    T1 星空[问题描述]你是能看到第一题的friends 呢.——hja点点星空是一张

  3. Employees Earning More Than Their Managers

    The Employee table holds all employees including their managers. Every employee has an Id, and there ...

  4. nc扫描端口

    nc -n -v -z -w 1 ip地址 1-1000 (端口号) 详细信息 -v 排除dns  -n 不发送任何数据-z 超时设置为1秒 -w 1

  5. mac 查看python安装路径

    1.terminal : input: which Python 2.terminal: input : python  --->import sys  ----> print sys.p ...

  6. 使用CSS设置Chrome打印背景色

    以下内容适用于Chrome浏览器 打印背景色可以通过在打印预览页面勾选背景图形实现 如果需要在用户不勾选的情况下依然能够打印背景色,可以通过css实现,如,table隔行设置背景色: .data-ta ...

  7. python 之Requests库学习笔记

    1.    Requests库安装 Windows平台安装说明: 直接以管理员身份打开cmd运行界面,使用pip管理工具进行requests库的安装. 具体安装命令如下: >pip instal ...

  8. LeetCode Add Two Numbers 两个数相加

    /** * Definition for singly-linked list. * struct ListNode { * int val; * ListNode *next; * ListNode ...

  9. “ipconfig不是内部命令或外部命令”解决方法

    第一:用鼠标右键单击“计算机”,在弹出的下拉菜单中选择“属性”. 第二:在系统属性中选择“高级系统设置”.在系统属性对话框中找到其上方的“高级”选项卡,里面有一个“环境变量”按钮,点击进入 第三:在下 ...

  10. Netweaver和CloudFoundry里的trace开关

    Netweaver 事务码SU01的参数设置里,有很多关于trace(跟踪)的开关. FPTRACELEVEL: 设成04后,能将ADS生成PDF的trace信息写入生成的PDF. 详细原理参考我的b ...