Time Limit: 3000MS   Memory Limit: 131072KB   64bit IO Format: %lld & %llu

Description

Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题。现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N)。

Input

一个整数,为N。

Output

一个整数,为所求的答案。

Sample Input

6

Sample Output

15

Hint

【数据范围】

对于60%的数据,0<N<=2^16。

对于100%的数据,0<N<=2^32。

Source

SDOI2012

求Σgcd(i,n) (1<=i<=n)

暴力枚举当然可行,但是TLE不可避。

考虑转化问题,从1到n的范围内,有许多个i的gcd(i,n)等于同一个n的因数。我们可以枚举n的每一个因数k,累计“以该数k为解的gcd(i,n)的个数s(k)"乘以该数,就能得到答案。

若有gcd(n,m)=k,那么n和m同除公约数k后,可以得到gcd(n/k,m/k)=1。由前式可知(m/k)与(n/k)互质。满足条件的(m/k)个数,也就是s(k)就等于phi(n/k) ←欧拉函数!

解1:直接套模板。算法无误,但是因为题目数据大,保存函数后再处理会RE(原因目测是存储用数组开不了那么大)

 /*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int maxn=;
long long n;
int m[maxn],phi[maxn],p[maxn],pt;
int euler()
{
phi[]=;
int N=maxn;
int k;
for(int i=;i<N;i++)
{
if(!m[i])//i是素数
p[pt++]=m[i]=i,phi[i]=i-;
for(int j=;j<pt&&(k=p[j]*i)<N;j++)
{
m[k]=p[j];
if(m[i]==p[j])//为了保证以后的数不被再筛,要break
{
phi[k]=phi[i]*p[j];
/*这里的phi[k]与phi[i]后面的∏(p[i]-1)/p[i]都一样(m[i]==p[j])只差一个p[j],就可以保证∏(p[i]-1)/p[i]前面也一样了*/
break;
}
else
phi[k]=phi[i]*(p[j]-);//积性函数性质,f(i*k)=f(i)*f(k)
}
}
}
int main(){
euler();
scanf("%lld",&n);
long long m=sqrt(n);
int i,j;
long long ans=;
for(i=;i<=m;i++){
if(n%i==){
ans+=phi[n/i]*i;
ans+=(n/i)*phi[i];
}
}
printf("%lld\n",ans);
return ;
}

解2:多花点时间,每次都算一遍。并不会TLE,神奇

代码是从hzw学长那学到的,精简得很。

 /*by SilverN*/
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cstdio>
#include<cmath>
using namespace std;
const int mxn=;
long long n,m;
long long phi(long long x){
long long a=x;
for(long long i=;i<=m;i++){
if(x%i==){//找到因数
a=a/i*(i-);//基本计算公式 a*=((i-1)/i)
while(x%i==)x/=i;//除去所有相同因数
}
}
if(x>)a=a/x*(x-);//处理最后一个大因数
return a;
}
int main(){
scanf("%lld",&n);
m=sqrt(n);
int i,j;
long long ans=;
for(i=;i<=m;i++){
if(n%i==){
ans+=phi(n/i)*i;
ans+=(n/i)*phi(i);
}
}
printf("%lld\n",ans);
return ;
}

Bzoj2705 Longge的问题的更多相关文章

  1. Bzoj-2705 Longge的问题 欧拉函数

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2705 题意: 求 sigma(gcd(i,n), 1<=i<=n<2^3 ...

  2. BZOJ2705 SDOI2012 Longge的问题 【欧拉函数】

    BZOJ2705 SDOI2012 Longge的问题 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, ...

  3. BZOJ2705: [SDOI2012]Longge的问题

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). Input 一 ...

  4. 【bzoj2705】 SDOI2012—Longge的问题

    http://www.lydsy.com/JudgeOnline/problem.php?id=2705 (题目链接) 题意 给定一个整数N,你需要求出∑gcd(i, N)(1<=i <= ...

  5. 【BZOJ2705】【Sdoi2012】Longge的问题

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出\(\Sigma gcd(i, N) (1 \leq i \leq N ...

  6. 【欧拉函数】BZOJ2705: [SDOI2012]Longge的问题

    Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N).   Solut ...

  7. BZOJ2705:[SDOI2012]Longge的问题——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=2705 Description Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在 ...

  8. 【bzoj2705】[SDOI2012]Longge的问题

    2705: [SDOI2012]Longge的问题 Time Limit: 3 Sec  Memory Limit: 128 MBSubmit: 2507  Solved: 1531[Submit][ ...

  9. [SDOi2012]Longge的问题 BZOJ2705 数学

    题目背景 SDOi2012 题目描述 Longge的数学成绩非常好,并且他非常乐于挑战高难度的数学问题.现在问题来了:给定一个整数N,你需要求出∑gcd(i, N)(1<=i <=N). ...

随机推荐

  1. Android Studio系列教程二--基本设置与运行

    Android Studio系列教程二--基本设置与运行 2014 年 11 月 28 日 DevTools 本文为个人原创,欢迎转载,但请务必在明显位置注明出处! 上面一篇博客,介绍了Studio的 ...

  2. iOS app上传错误集锦(转载)

    1.工程里增加了版本自动更新. 2.未增加判断网络状态的类Reachability. 3.问题:error itms -90049 This bundel is invalid. The bundle ...

  3. 2666 Accept Ratio(打表AC)

    2666 Accept Ratio  时间限制: 1 s  空间限制: 32000 KB  题目等级 : 钻石 Diamond 题解  查看运行结果     题目描述 Description 某陈痴迷 ...

  4. ASP.NET MVC3 Model验证总结(转)

    推荐:   ASP.NET MVC的Model元数据与Model模板:预定义模板 http://www.cnblogs.com/artech/archive/2012/05/02/model-meta ...

  5. nginx安装pcre

    一.有的服务器上没有安装pcre那么安装nginx的时候会报错 所以在安装之前我们可以: yum install pcre-devel 如果很不巧,服务器也没有配yum,也不能连互联网.那么我们只能自 ...

  6. libevent+bufferevent总结

    libevent+bufferevent总结 1 学习参考网址 libevent学习网址:http://blog.csdn.net/feitianxuxue/article/details/93725 ...

  7. Java的动态代理(dynamic proxy)

    什么是动态代理(dynamic proxy) 动态代理(以下称代理),利用Java的反射技术(Java Reflection),在运行时创建一个实现某些给定接口的新类(也称“动态代理类”)及其实例(对 ...

  8. 使用eclipse+tomcat搭建本地环境

    项目开发工具很多,这里简单介绍下使用eclipse+tomcat如何搭建本地环境. 安装开发工具如下: 1. jdk的安装参考 下载地址:http://pan.baidu.com/s/1sj9rVYX ...

  9. HTTP协议简介1

    概念 HTTP协议:超文本传输协议,用于服务端传输超文本到客户端的传输协议.是一个应用层协议. 工作流程 一次http请求就是一个事务.过程可分为四步: 1.客户端与服务器建立链接.页面上单击某个链接 ...

  10. <转载> 你应该更新的Java知识之常用程序库(一)

    原文出处:http://www.blogbus.com/dreamhead-logs/226738702.html 很多人眼中,Java已经是一门垂垂老矣的语言,但并不妨碍Java世界依然在前进.如果 ...