首先我们知道,正方形内个是对称的,关于y=x对称,所以只需要算出来一半的人数

然后乘2+1就行了,+1是(1,1)这个点

开始我先想的递推

那么我们对于一半的三角形,一列一列的看,假设已经求好了第I-1列的,那么第I列加上

之后,不会影响前I-1列能看见的人,那么第I列一共加上I个人,设坐标是(I,Y),

我们可以发现如果gcd(I,Y)<>1的时候这个点是看不见的,因为横纵坐标存在约数,也就是

前面有一个整点点和这个点还有原点在同一直线上(三角形相似),那么我们要找第I列I,Y互质的

点,也就是和I互质的点的个数,也就是phi(i),那么就不用递推了,我们每个I都要累加phi,也就是

生成1-n-1的欧拉函数表就行了(n-1是因为(0,0)点算第1列,我就在这儿WA了一次。。。)

/**************************************************************
    Problem:
    User: BLADEVIL
    Language: Pascal
    Result: Accepted
    Time: ms
    Memory: kb
****************************************************************/
 
//By BLADEVIL
var
    i, j                        :longint;
    n                           :longint;
    phi, mindiv                 :array[..] of longint;
    prime                       :array[..] of longint;
    ans                         :int64;
     
begin
    read(n);
    for i:= to n do
    begin
        if mindiv[i]= then
        begin
            mindiv[i]:=i;
            inc(prime[]);
            prime[prime[]]:=i;
            phi[i]:=i-;
        end;
        for j:= to prime[] do
        begin
            if prime[j]*i>n then break;
            if i mod prime[j]<> then
                phi[i*prime[j]]:=phi[i]*(prime[j]-) else
                phi[i*prime[j]]:=phi[i]*prime[j];
            mindiv[prime[j]*i]:=prime[j];
            if i mod prime[j]= then break;
        end;
    end;
    phi[]:=;
    for i:= to n- do ans:=ans+phi[i];
    ans:=ans*+;
    writeln(ans);
end.

bzoj 2190 线性生成欧拉函数表的更多相关文章

  1. UVa 11426 - GCD - Extreme (II) 转化+筛法生成欧拉函数表

    <训练指南>p.125 设f[n] = gcd(1, n) + gcd(2, n) + …… + gcd(n - 1, n); 则所求答案为S[n] = f[2]+f[3]+……+f[n] ...

  2. 【欧拉函数表】POJ2478-Farey Sequence

    [题目大意] 求∑φ(i)(1<=i<=N). [思路] 欧拉函数具有如下的重要推论: 当b是素数时 性质①若b|a,有φ(ab)=φ(a)*b: 性质②若b不|a,有φ(ab)=φ(a) ...

  3. UVA - 11426 欧拉函数(欧拉函数表)

    题意: 给一个数 N ,求 N 范围内所有任意两个数的最大公约数的和. 思路: f 数组存的是第 n 项的 1~n-1 与 n 的gcd的和,sum数组存的是 f 数组的前缀和. sum[n]=f[1 ...

  4. bzoj 2190 仪仗队(欧拉函数)

    2190: [SDOI2008]仪仗队 Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 2245  Solved: 1413[Submit][Statu ...

  5. BZOJ 2190仪仗队【欧拉函数】

    问题的唯一难点就是如何表示队长能看到的人数?如果建系,队长所在的点为(0,0)分析几组数据就一目了然了,如果队长能看到的点为(m,n),那么gcd(m,n)=1即m n 互质或者是(0,1),(1,0 ...

  6. BZOJ 2190: [SDOI2008]仪仗队( 欧拉函数 )

    假设C君为(0, 0), 则右上方为(n - 1, n - 1). 一个点(x, y) 能被看到的前提是gcd(x, y) = 1, 所以 answer = ∑ phi(i) * 2 + 2 - 1 ...

  7. The Euler function(线性筛欧拉函数)

    /* 题意:(n)表示小于n与n互质的数有多少个,给你两个数a,b让你计算a+(a+1)+(a+2)+......+b; 初步思路:暴力搞一下,打表 #放弃:打了十几分钟没打完 #改进:欧拉函数:具体 ...

  8. [bzoj 2190][SDOI2008]仪仗队(线性筛欧拉函数)

    题目:http://www.lydsy.com/JudgeOnline/problem.php?id=2190 分析:就是要线性筛出欧拉函数... 直接贴代码了: memset(ans,,sizeof ...

  9. BZOJ 2190 仪仗队(线性筛欧拉函数)

    简化题意可知,实际上题目求得是gcd(i,j)=1(i,j<=n)的数对数目. 线性筛出n大小的欧拉表,求和*2+1即可.需要特判1. # include <cstdio> # in ...

随机推荐

  1. Flexbox布局模式的理解

    个人博客地址:  雨中的鱼-前端知识分享   http://www.showhtml5.cc    分享干货,有兴趣的人可以一起来分享前端知识  加Q群:440279380   Flexbox,一种C ...

  2. 源码-集合:ArrayList

    只是文章摘录,还未研究 JAVA ArrayList详细介绍(示例) http://www.jb51.net/article/42764.htm Jdk1.6 JUC源码解析汇总 - 永远保持敬畏之心 ...

  3. Ubuntu下使用Git_5

    还欠大家最后一篇Git的学习. Git的下一个内容,标签,标签是为了更方便的参考提交而给他表上通俗易懂的名称 Git可以使用两种标签,轻标签和注解标签,打上的标签是固定的,不能向分支那样可以移动位置, ...

  4. MySQL☞Group By

    分组: group by 列名:根据某一列,把数据分成几组,经常对每一组的数据使用聚合函数,按照我的理解,该列有几种不同的值,那么就把该列分成几组,如下图 简单的来说,第二列中有两个不同的值a和b,那 ...

  5. 第四篇 Python循环

    While 循环 For 循环

  6. web入门脑图

  7. 使用PNotify构建消息弹窗

    参考地址 官网:http://sciactive.com/pnotify/ GitHub:https://github.com/sciactive/pnotify npm仓库:https://www. ...

  8. lintcode-86-二叉查找树迭代器

    86-二叉查找树迭代器 设计实现一个带有下列属性的二叉查找树的迭代器: 元素按照递增的顺序被访问(比如中序遍历) next()和hasNext()的询问操作要求均摊时间复杂度是O(1) 样例 对于下列 ...

  9. Hash表 算法的详细解析

    http://xingyunbaijunwei.blog.163.com/blog/static/76538067201111494524190/ 什么是HashHash,一般翻译做“散列”,也有直接 ...

  10. 【WebService】——契约优先

    相关博客: [WebService]--入门实例 [WebService]--SOAP.WSDL和UDDI 前言: 我们先来看一个契约优先的开发实例,通过熟悉他的开发流程,最后再和代码优先的方式进行比 ...