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^3

    对于 60%的数据有 T<=100,N<=10^7。

    对于 100%的数据有 1<=T<=1000,1<=N<=10^9。

    30% 暴力

      我们采用无脑枚举,就有30分了。

    60%。。。100% 

      1.一个数的因数个数不会超过2√n。

      2.小于N且与N互质的数的和为φ(N)*N / 2。

      如果知道了这个结论的话就会发现   暴搜就可以了!。

      我们只需要在√N的时间将N质因数分解。然后就可以 dfs 出 N 的所有因数了,另外在暴搜的过程中我们还可以顺便求出φ(N)。

      于是时间复杂度是T√N 的。

     1 #include<bits/stdc++.h>
     2 #define ll long long
     3 using namespace std;
     4 int n,x,y,pre;
     5 int t[50],top;
     6 int tot[50];
     7 ll ans,tmp;
     8 void dfs(int u,ll sum,ll now)
     9 {
    10     if(u>top)
    11     {
    12         ans+=(now*sum>>1);
    13         return ;
    14     }
    15     dfs(u+1,sum,now);
    16     for(int i=1;i<=tot[u];++i)
    17     {
    18         now*=t[u];
    19         sum*=t[u];
    20         dfs(u+1,sum,now/t[u]*(t[u]-1));
    21     }
    22 }
    23 int main()
    24 {
    25     scanf("%d",&n);
    26     while(n--)
    27     {
    28         scanf("%d",&x);
    29         top=0;y=sqrt(x);ans=0;
    30         for(int i=2;i<=y;++i)
    31             if(x%i==0)
    32             {
    33                 t[++top]=i;tot[top]=0;
    34                 while(x%i==0)
    35                 {
    36                     ++tot[top];
    37                     x/=i;
    38                 }
    39             }
    40         if(x>1)
    41         {
    42             t[++top]=x;
    43             tot[top]=1;
    44         }
    45         dfs(1,1,1);
    46         printf("%lld
    ",ans+1);
    47     }
    48     return 0;
    49 }
    代码
  • 相关阅读:
    特征的处理
    Pandas读取文件
    标准化数据-StandardScaler
    hibernate 继承映射
    hibernate 多对多关联映射
    hibernate 一对一关联映射
    hibernate 一对多 单双向关联
    hibernate配置文件
    spring整合struts2
    AWS云教育账号创建以及搭建数据库
  • 原文地址:https://www.cnblogs.com/wyher/p/9799872.html
Copyright © 2011-2022 走看看