题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n)

  此题和UVA 11426 一样,不过n的范围只有20000,但是最多有20000组数据。 当初我直接照搬UVA11426,结果超时,因为没有预处理所有的结果(那题n最多4000005,但最多只有100组数据),该题数据太多了额。。。

思路:令sum(n)=gcd(1,n)+gcd(2,n)+...+gcd(n-1,n),则所求结果ans(n)=sum(2)+sum(3)+...+sum(n)
      只需求出sum(n),就可以推出所有答案:ans(n)=ans(n-1)+sum(n)(我当时怎么就没想到呢,额。。。)。
      接下来重点就是求sum(n):
      注意到所有gcd(x,n)都是n的约数,可以按照这个约数进行分类,用g(n,i)表示满足g(x,n)=i且x<n的正整数个数,
      则sum(n)=sum{i*g(n,i)|i是n的约数}。注意到gcd(x,n)=i的充要条件是gcd(x/i,n/i)=1
      (额,我是看到书上的这个提示,才想到怎么做的。。。),因此满足条件的x/i有phi(n/i)个(欧拉函数),说明g(n,i)=phi(n/i)。
      由于时间限制,同素数筛选法,我们需要对于每个i枚举它的倍数n并更新sum(n),这些都在预处理中完成。

#include <iostream>
#include <stdio.h>
#include <string.h>
/*
数论题 题目:给出n,求gcd(1,2)+gcd(1,3)+gcd(2,3)+gcd(1,4)+gcd(2,4)+gcd(3,4)+...+gcd(1,n)+gcd(2,n)+...+gcd(n-1,n) 思路:令sum(n)=gcd(1,n)+gcd(2,n)+...+gcd(n-1,n),则所求结果ans(n)=f(2)+f(3)+...+f(n)
只需求出f(n),就可以推出所有答案:ans(n)=ans(n-1)+sum(n)(我当时怎么就没想到呢,额。。。)。
接下来重点就是求sum(n):
注意到所有gcd(x,n)都是n的约数,可以按照这个约数进行分类,用g(n,i)表示满足g(x,n)=i且x<n的正整数个数,
则sum(n)=sum{i*g(n,i)|i是n的约数}。注意到gcd(x,n)=i的充要条件是gcd(x/i,n/i)=1
(额,我是看到书上的这个提示,才想到怎么做的。。。),因此满足条件的x/i有phi(n/i)个(欧拉函数),说明g(n,i)=phi(n/i)。
由于时间限制,同素数筛选法,我们需要对于每个i枚举它的倍数n并更新sum(n),这些都在预处理中完成。
*/
using namespace std;
const int maxn=;
int phi[maxn];
long long sum[maxn];
long long ans[maxn];
void init(){
memset(phi,,sizeof(phi));
memset(sum,,sizeof(sum));
memset(ans,,sizeof(ans));
phi[]=;
for(int i=;i<maxn;i++){
if(!phi[i]){
for(int j=i;j<maxn;j+=i){
if(!phi[j])
phi[j]=j;
phi[j]=phi[j]/i*(i-);
}
}
}
long long i,j;
for(i=;i<maxn;i++){
for(j=;i*j<maxn;j++){
/*
//原来第二次循环j是从1~maxn,循环中加个if条件,预处理都运行很慢很慢,超时
if(i*j>=maxn)
continue;
*/
sum[i*j]+=phi[i]*j; //n=i*j,j为n和x的公约数,类似于素数筛选法
}
}
/*
//白书上的代码 for(int i=1;i<maxn;i++){
for(int n=i*2;n<maxn;n+=i)
sum[n]+=i*phi[n/i];
}
*/
ans[]=sum[];
for(int i=;i<maxn;i++){
ans[i]=ans[i-]+sum[i]; //怎么都忘记可以利用前一项的结果啊!!!
}
}
int main()
{
init();
int n;
long long result;
while(scanf("%d",&n),n){
printf("%lld\n",ans[n]); //UVA上,注意是lld }
return ;
}

UVA 11424 GCD - Extreme (I) (欧拉函数+筛法)的更多相关文章

  1. UVA 11426 GCD - Extreme (II) (欧拉函数+筛法)

    题目链接:http://acm.hust.edu.cn/vjudge/contest/view.action?cid=70017#problem/O 题意是给你n,求所有gcd(i , j)的和,其中 ...

  2. UVA 11426 GCD - Extreme (II) 欧拉函数

    分析:枚举每个数的贡献,欧拉函数筛法 #include <cstdio> #include <iostream> #include <ctime> #include ...

  3. UVA 11426 GCD - Extreme (II)(欧拉函数打表 + 规律)

    Given the value of N, you will have to find the value of G. The definition of G is given below:Here ...

  4. uva 11426 GCD - Extreme (II) (欧拉函数打表)

    题意:给一个N,和公式 求G(N). 分析:设F(N)= gcd(1,N)+gcd(2,N)+...gcd(N-1,N).则 G(N ) = G(N-1) + F(N). 设满足gcd(x,N) 值为 ...

  5. UVA 11426 - GCD - Extreme (II) 欧拉函数-数学

    Given the value of N, you will have to find the value of G. The definition of G is given below:G =i< ...

  6. UVA11426 GCD - Extreme (II) (欧拉函数/莫比乌斯反演)

    UVA11426 GCD - Extreme (II) 题目描述 PDF 输入输出格式 输入格式: 输出格式: 输入输出样例 输入样例#1: 10 100 200000 0 输出样例#1: 67 13 ...

  7. UVA11426 GCD - Extreme (II)---欧拉函数的运用

    题目链接:http://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem& ...

  8. GCD - Extreme(欧拉函数变形)

    题目链接:https://vjudge.net/problem/UVA-11426 题目大意: 给出整数n∈[2,4000000],求解∑gcd(i,j),其中(i,j)满足1≤i<j≤n. 的 ...

  9. UVA11426 GCD - Extreme (II) —— 欧拉函数

    题目链接:https://vjudge.net/problem/UVA-11426 题意: 求 ∑ gcd(i,j),其中 1<=i<j<=n . 题解:1. 欧拉函数的定义:满足 ...

随机推荐

  1. 2016.10.30 济南学习 Day2 下午 T1

    他 [问题描述] 一张长度为N的纸带,我们可以从左至右编号为0 − N(纸带最左端标号为 0).现在有M次操作,每次将纸带沿着某个位置进行折叠,问所有操作之后纸带 的长度是多少. [输入格式] 第一行 ...

  2. Windows phone(1)-ApplicationBar(应用栏)

    在手机APP应用当中,我们往往会想某些操作能够进行快速访问或者能够持续显示用户信息的情况,比如像做泡泡堂游戏右边区域玩家信息 在wp7,wp8中为我们提供了ApplicationBar这样的控件来创建 ...

  3. 【风马一族_windom】 批量修改相同文件类型的后缀

    难题:有时因为某种原因,修改一堆文件的类型,重复操作次数多,浪费时间也跟着多,收获也会相当少. 提问:对于软件而言,可量化的,有规律的操作,可以使用程序来进行替代. 特性:在微软操作系统上,不同后缀的 ...

  4. CSS3实现半像素边框

    一.思路 普通的1px黑色实线边框: border: 1px solid #000; 半像素边框当然不是简单地把1px改为0.5px(没测试过,可能会被解析成1或者0),border-width的值只 ...

  5. JS重写alert,保证弹窗错误的友好性

    // ------------------------------------------------------------- // 重写alert,保证弹窗错误的友好性 var j_oldAler ...

  6. [大牛翻译系列]Hadoop(8)MapReduce 性能调优:性能测量(Measuring)

    6.1 测量MapReduce和环境的性能指标 性能调优的基础系统的性能指标和实验数据.依据这些指标和数据,才能找到系统的性能瓶颈.性能指标和实验数据要通过一系列的工具和过程才能得到. 这部分里,将介 ...

  7. 版本控制器 (Svn,Git)

    Svn: 集中式版本控制器,首先开发者在开始新一天的工作之前必须从服务器获取代码,然后进入自己的分支开发,开发完成后把自己的分支合并到主分支上进行提交,解决冲突.所有的版本信息都放在服务器上.如果脱离 ...

  8. SQLite清空表并将自增列归零[转]

    SQL标准中有 WHERE name = 'TableName'; 也可以直接把该记录删掉: 1 DELETE FROM sqlite_sequence WHERE name = 'TableName ...

  9. yii2.0 控制器加载不同的user组件

     Yii::$app->user->id  Yii::$app->user2->id Yii::$app->admin->id          identityC ...

  10. 【BZOJ 1090】[SCOI2003]字符串折叠

    Description 折 叠的定义如下: 1. 一个字符串可以看成它自身的折叠.记作S  S 2. X(S)是X(X>1)个S连接在一起的串的折叠.记作X(S)  SSSS…S(X个S). ...