zoukankan      html  css  js  c++  java
  • 数论

    第二题:挖掘机技术哪家强
    问题描述
    有人问现实中为什么总是男生追求女生,反过来很少。实际上女生也是想主
    动追求男生的,但是世俗中对于主动追求男生的女生有种歧视,这样就使得女生
    不大敢主动追求男生。但是面对喜欢的男生,难道就不出手么?女生只能步步为
    营,挖坑来引诱男生往里跳。这时候问题就来了,挖掘机技术到底哪家强?被热血
    沸腾的广告洗脑了若干天后,Matt 终于下定决心,毅然登上了开往泉城的列车,
    决心寻找生活的希望。
    来到布鲁谢特学院后,Matt 逐渐地了解了各种型号的挖掘机。在这里我们
    可以认为有大挖掘机和小挖掘机两种。
    今天 Matt 的任务很简单:
    首先他要用大挖掘机挖出恰好 N 单位体积的砂土。
    由于小挖掘机比较笨拙,它每次挖的砂土体积是固定的。也就是说,设每次挖 x
    单位体积砂土,那么 N 需要被 x 整除。在挖出若干堆体积为 x 的砂土后,Matt
    需要计算 x 的“难挖指数”。体积 x 的“难挖指数”定义如下:对于某个不超
    过 x 的体积 y,如果 x 与 y 的最大公约数为 1,那我们认为体积 y 是“难挖
    的”,x 的“难挖指数”就要加上 y。
    由于 Matt 之后还需要用小挖掘机处理被大挖掘机挖出的砂土,他希望知道
    所有可能的 x 的难挖指数的和,这样他好估算今天要干多久,不然作为布鲁谢特
    的高才生,他出门要被笑话的。
    输入
    第一行一个整数 T,表示数据组数。
    接下来 T 行每行一个整数表示 N。
    输出
    对于每个数据输出一行一个整数表示难挖指数的和。
    样例输入
    3
    2
    3
    4
    样例输出
    2
    4
    6
    提示
    【数据规模和约定】
    对于 30%的数据有 T<=20,N<=10^4。
    对于 60%的数据有 T<=100,N<=10^7。
    对于 100%的数据有 1<=T<=1000,1<=N<=10^9。

     

     

     

     

    设f(d)=1-d与d互质的数的和

    题目意思:

    求f(d|n)的和

    结论:

    1-n中与n互质的数的和=n*φ(n)/2 

    因为假如y与n互质 则n-y也与n互质 所以加起来就等于n了,y的个数就是φ(n),然后多加了一倍,就除以2

    if(y|x)

    φ(x*y)=φ(x)*y;

    else 

    φ(x*y)=φ(x)*(y-1)  (欧拉函数是积性函数)

    void dfs(int x,long long y,long long z)
    {
        if(x>tot)
        {
            ans+=y*z/2;//ans就是答案 
            return;
        }
        dfs(x+1,y,z); 
        int v=1;
        for(int i=1;i<=q[x];i++)//q[x]为n的第x个质因数的指数 
        {
            v*=p[x];//p[x]为n的第x个约数 
            if(i==1)
            dfs(x+1,y*v,z*(p[x]-1));//y里面没有 p[x]这个约数 
            else
            dfs(x+1,y*v,z*(p[x]-1)*(v/p[x]));//第一次是p[x]-1,其他的都是p[x] 
        }
    }
    dfs 求欧拉函数

     

    具体思路:

    1000组数据,又不能预处理,n=1e14,大概可以看出来是T*sqrt(n)的时间复杂度

    然后题目要求的东西又和n的约数有关 那就差不多知道了要枚举n的约数,在计算答案

    考虑到要计算n的所有约数的f(),所以就可以把n分解质因数,顺便就可以把φ()求出来

    结束

  • 相关阅读:
    11-14序列化模块之json、pickle、shelve
    11-13 模块_collections(不太重要)&time&random&os
    Python常用标准库之datetime、random、hashlib、itertools
    模块安装说明
    __name__=='__main__'作用
    10-29 继承-单继承
    10-12 面向对象初级
    栈内存 堆内存
    【初识MyBatis→简单的mybatis开发环境搭建】
    【Linux常用命令小手册】
  • 原文地址:https://www.cnblogs.com/ZY2510998968/p/9801411.html
Copyright © 2011-2022 走看看