题意:给出N,求所有满足i<j<=N的gcd(i,j)之和

这题去年做过一次。。。

设f(n)=gcd(1,n)+gcd(2,n)+......+gcd(n-1,n),那么answer=S[N]=f(1)+f(2)+...+f(N)。

先求出每一个f(n)。

令g(n,i)=【满足gcd(x,n)=i且x<N的x的数量】,i是n的约数

那么f(n)=sigma【i*g(n,i)】  (i即gcd的值,g(n,i)为数量)

又注意到gcd(x,n)=i -> gcd(x/i,n/i)=1 -> x/i与n/i互质 -> 满足该条件的x/i有phi(n/i)个

那么再用欧拉函数就可以求出每一个f(n)啦~

如果找n的每一个约数i会有点慢,可以枚举i,令n=2*i,3*i,........(n是i的所有倍数且小于MAXN)

for (int i=1;i<=MX;i++)
  for (int n=i*2;n<=MX;n+=i)
    f[n]=f[n]+(i*phi[n/i]);

粗体部分的思想很常用,已加入数论模板豪华午餐╮(╯▽╰)╭

 #include <stdio.h>
#include <string.h>
//using namespace std;
#define MX 4000005
#define LL long long LL phi[MX],f[MX],S[MX];
int N; void calc_phi(int n)
{
for (int i=;i<=n;i++)
phi[i]=;
phi[]=;
for (int i=;i<=n;i++)
if (!phi[i])
for (int j=i;j<=n;j+=i)
{
if (!phi[j]) phi[j]=j;
phi[j]=phi[j]/i*(i-);
}
} int main()
{
calc_phi(MX); memset(f,,sizeof(f));
for (int i=;i<=MX;i++)
for (int n=i*;n<=MX;n+=i)
f[n]=f[n]+(i*phi[n/i]); S[]=f[];
for (int i=;i<=MX;i++)
S[i]=S[i-]+f[i]; while(~scanf("%d",&N))
{
if (N==) break;
printf("%lld\n",S[N]);
} return ;
}

uva11426 gcd、欧拉函数的更多相关文章

  1. BZOJ 2818: Gcd [欧拉函数 质数 线性筛]【学习笔记】

    2818: Gcd Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 4436  Solved: 1957[Submit][Status][Discuss ...

  2. POJ 2773 Happy 2006【GCD/欧拉函数】

    根据欧几里德算法,gcd(a,b)=gcd(a+b*t,b) 如果a和b互质,则a+b*t和b也互质,即与a互质的数对a取模具有周期性. 所以只要求出小于n且与n互质的元素即可. #include&l ...

  3. HDU 2588 GCD (欧拉函数)

    GCD Time Limit: 1000MS   Memory Limit: 32768KB   64bit IO Format: %I64d & %I64u Submit Status De ...

  4. Bzoj-2818 Gcd 欧拉函数

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

  5. BZOJ2818: Gcd 欧拉函数求前缀和

    给定整数N,求1<=x,y<=N且Gcd(x,y)为素数的数对(x,y)有多少对. 如果两个数的x,y最大公约数是z,那么x/z,y/z一定是互质的 然后找到所有的素数,然后用欧拉函数求一 ...

  6. hdu2588 gcd 欧拉函数

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

  7. 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 和 ...

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

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

  9. HDU 1695 GCD (欧拉函数,容斥原理)

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

  10. hdu 1695 GCD (欧拉函数+容斥原理)

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

随机推荐

  1. 修改Esxi克隆的CentOS的IP地址

    1.读取/etc/udev/rules.d/70-persistent-net.rules文件中eth1的MAC地址. 2.编辑文件 /etc/sysconfig/network-script/ifc ...

  2. [转]nodejs npm常用命令

    FROM : http://www.cnblogs.com/linjiqin/p/3765772.html npm是一个node包管理和分发工具,已经成为了非官方的发布node模块(包)的标准.有了n ...

  3. Word中的字体大小

    Word中的字体大小(几号-几磅)   Word对字体大小采用两种不同的度量单位,其中一种是以"号"为度量单位,如常用的"初号.小初.一号.小一--七号.八号" ...

  4. UDP的坏处

    众所周知,UDP是一个面向无连接的协议.通信时不可靠的.这就会出现一些问题 (1)数据报丢失 因为是无连接,的所以可以用recvfrom和sendto来接收和发送消息,如果socket是阻塞的,那么当 ...

  5. IBM WebSphere MQ 7.5基本用法

    一.下载7.5 Trial版本 http://www.ibm.com/developerworks/downloads/ws/wmq/ 这是下载网址,下载前先必须注册IBM ID,下载完成后一路Nex ...

  6. WP8.1中C++的winodws运行时组件位移操作的差异

    最近学习WP8.1应用开发,想把C语言的SM3国密算法移植到手机app中.由于把C语言的代码转换成C#代码工作量较大,因此只能用winodws运行时组件来实现. SM3国密算法是一种HASH算法,具体 ...

  7. opencv5-objdetect之级联分类器

    这是<opencv2.4.9tutorial.pdf>的objdetect module的唯一一个例子. 在opencv中进行人脸或者人眼 或者身体的检测 首先就是训练好级联分类器,然后就 ...

  8. 似魔鬼的 『 document.write 』

    在平时的工作中,楼主很少用 document.write 方法,一直觉得 document.write 是个危险的方法.楼主不用,并不代表别人不用,最近给维护的项目添了一点代码,更加深了我对 &quo ...

  9. 45个JavaScript小技巧

    原文地址 http://modernweb.com/2013/12/23/45-useful-javascript-tips-tricks-and-best-practices/ 这篇文章的质量个人感 ...

  10. DTCMS插件的制作实例电子资源管理(一)插件目录结构

    总目录 插件目录结构(一) Admin后台页面编写(二) 前台模板页编写(三) URL重写(四)     本实例旨在以一个实际的项目中的例子来介绍如何在dtcms中制作插件,本系列文章非入门教程,部分 ...