这里是枚举每一个最大公约数p,那么最后求的是f(n) = sigma(p*phi(n/p))    phi()为欧拉函数

这里可以试着算一下,然后会发现这个是积性函数的

那么只要考虑每一类质数分开算,最后乘在一起就行了

而对于f(p^k) p为素数的求解可以这样考虑

对于前一个f(p^(k-1)) , 那么f(p^k)相当于把f(p^(k-1)) 中的所有情况都乘上了p ,  然后加上新产生的gcd()=1的情况,这个利用过程中的欧拉函数定理求解

phi(n) = (p1-1)*p1^(k1-1)....+(pn-1)*pn^(kn-1)

这里只能在只含有唯一素数因子的情况下计算,因为如果有别的素数因子,新产生的gcd除了1以外,还有当前乘上的因子p之外的素数因子考虑不到,会使答案变小,

这里大概想想就可以知道了

 #include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <ctime>
#include <cstdlib>
using namespace std;
#define ll long long
#define N 100000
int prime[N+] , tot , fai[N+];
bool check[N+]; void get_prime()
{
for(int i= ; i<=N ; i++){
if(!check[i]){
prime[tot++] = i;
fai[i] = i-;
}
for(int j= ; j<tot ; j++){
if((ll)prime[j]*i>N) break;
check[prime[j]*i] = true;
if(i%prime[j]==){
fai[i*prime[j]] = fai[i]*prime[j];
break;
}else fai[i*prime[j]] = fai[i]*(prime[j]-);
}
}
} void solve(int n)
{
/*这里求出一个gcd(i,n)=1的个数,就是求n的欧拉函数phi(n)
phi(n) = (p1-1)*p1^(k1-1)....+(pn-1)*pn^(kn-1)
*/
ll ret = ;
for(int i= ; i<tot ; i++){
if(prime[i]>n) break;
int cnt = ;
ll phi = , tmp = ;
while(n%prime[i]==){
if(!cnt) phi = prime[i]-;
else phi = phi*prime[i];
tmp = tmp*prime[i]+phi;
cnt++;
n/=prime[i];
}
ret = ret*tmp;
}
if(n>){
ret = ret*(*(ll)n-); //这里的n可能是超过1e9的整数,*2有可能超int,要注意
// if(ret<0) cout<<"last "<<n<<" "<<(2*n-1)<<" "<<ret<<endl;
}
printf("%I64d\n" , ret);
}
int main() {
// freopen("a.in" , "r" , stdin);
// freopen("out.txt" , "w" , stdout);
get_prime();
int n;
while(~scanf("%d" , &n)){
solve(n);
}
}

POJ 2480 求每一个数对于n的最大公约数的和的更多相关文章

  1. POJ 2299 求逆序对个数 归并排序 Or数据结构

    题意: 求逆序对个数 没有重复数字 线段树实现: 离散化. 单点修改,区间求和 // by SiriusRen #include <cstdio> #include <cstring ...

  2. POJ 3978 Primes(求范围素数个数)

    POJ 3978 Primes(求范围素数个数) id=3978">http://poj.org/problem? id=3978 题意: 给你一个区间范围A和B,要你求出[A,B]内 ...

  3. POJ 2480 Longge&#39;s problem 积性函数

    题目来源:id=2480" style="color:rgb(106,57,6); text-decoration:none">POJ 2480 Longge's ...

  4. poj 2480 Longge&#39;s problem 积性函数性质+欧拉函数

    题意: 求f(n)=∑gcd(i, N) 1<=i <=N. 分析: f(n)是积性的数论上有证明(f(n)=sigma{1<=i<=N} gcd(i,N) = sigma{d ...

  5. 给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数。

    题目:给定两个数组,这两个数组是排序好的,让你求这两个数组合到一起之后第K大的数. 解题思路: 首先取得数组a的中位数a[aMid],然后在b中二分查找a[aMid],得到b[bMid],b[bSt] ...

  6. PAT甲题题解-1013. Battle Over Cities (25)-求联通分支个数

    题目就是求联通分支个数删除一个点,剩下联通分支个数为cnt,那么需要建立cnt-1边才能把这cnt个联通分支个数求出来怎么求联通分支个数呢可以用并查集,但并查集的话复杂度是O(m*logn*k)我这里 ...

  7. 利用DFS求联通块个数

    /*572 - Oil Deposits ---DFS求联通块个数:从每个@出发遍历它周围的@.每次访问一个格子就给它一个联通编号,在访问之前,先检查他是否 ---已有编号,从而避免了一个格子重复访问 ...

  8. UVALive 4262——Trip Planning——————【Tarjan 求强连通分量个数】

    Road Networks Time Limit:3000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Submit Stat ...

  9. 题解报告:poj 2480 Longge's problem(欧拉函数)

    Description Longge is good at mathematics and he likes to think about hard mathematical problems whi ...

随机推荐

  1. Android 随想录之 Android 系统架构

    应用层(Application) Android 的应用层由运行在 Android 设备上的所有应用程序共同构成(系统预装程序以及第三方应用程序). 系统预装应用程序包含拨号软件.短信.联系人.邮件客 ...

  2. Poco C++——JSON解析

    #include <iostream> #include "Poco/Dynamic/Var.h" #include "Poco/Dynamic/Pair.h ...

  3. git相关资料

    Git教程http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000/git - 简明指南ht ...

  4. 探索 Pexpect,第 1 部分:剖析 Pexpect

    Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块. Pexpect 可以用来和像 ssh.ftp.passwd.telnet 等命令行程序进行自动交互.本文章介绍 Pexp ...

  5. 微信公共平台php用$GLOBALS["HTTP_RAW_POST_DATA"]收不到信息解决方法

    http://www.cnblogs.com/shendiao/archive/2013/04/24/3041450.html <?php /** * wechat php test */ // ...

  6. a、b交换与比较

    1.有两个变量a,b,不用if.?: .switch 或其他判断语句,找出两个数中 较大的: int max = ((a+b)+abs(a-b))/2 较小的: int min = ((a+b)-ab ...

  7. backbone--部分总结

    1.Backbone.history.start 方法可以让我们在点击后退或者前进的时候同样会触发路由的事件. 2.添加路由的路径,添加的路由路径要求重写父类的routes这个对象 var CustR ...

  8. EM算法原理以及高斯混合模型实践

    EM算法有很多的应用: 最广泛的就是GMM混合高斯模型.聚类.HMM等等. The EM Algorithm 高斯混合模型(Mixtures of Gaussians)和EM算法 EM算法 求最大似然 ...

  9. java中的异常和处理

    算术异常类:ArithmeticExecption 空指针异常类:NullPointerException 类型强制转换异常:ClassCastException 数组负下标异常:NegativeAr ...

  10. Objective-C 中 NULL、nil、Nil、NSNull 的定义及不同

    本文由我们团队的 康祖彬 童鞋撰写,这是他的个人主页:https://kangzubin.cn. 理解"不存在"的概念不仅仅是一个哲学的问题,也是一个实际的问题.我们是有形宇宙的居 ...