挖掘机技术哪家强---------------数论?

挖掘机技术哪家强

问题描述

  有人问现实中为什么总是男生追求女生,反过来很少。实际上女生也是想主 动追求男生的,但是世俗中对于主动追求男生的女生有种歧视,这样就使得女生 不大敢主动追求男生。但是面对喜欢的男生,难道就不出手么?女生只能步步为 营,挖坑来引诱男生往里跳。这时候问题就来了,挖掘机技术到底哪家强?被热血沸腾的广告洗脑了若干天后,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\n",ans+1);
47     }
48     return 0;
49 }
代码

 

posted @ 2018-10-16 18:44  Hevix  阅读(238)  评论(0编辑  收藏  举报