话说UVa的机子跑的好快呀…

(两题题意一样,前一题数据范围比较小)

题意:求$\sum_{i=1}^{n-1} \sum_{j=i+1}^n gcd(i,j),n<4\times 10^6$


转换一下变成$\sum_{i=2}^{n} \sum_{j=1}^{i-1} gcd(i,j)$,这个形式我们可以设$f(n)=\sum_{i=1}^{n-1} gcd(i,n)$原答案$ans(n)=\sum_{i=2}^{n}f(i)$

考虑如何快速求$f(n)$,根据约数进行分类,对于$n$的一个约数$i$,容易发cai现dao出现的次数是$\phi(\frac{n}{i})$(后来才知道是因为$gcd(x,n)=i$等价于$gcd( \frac{x}{i}, \frac{n}{i})=1$,然后这样的$x$的个数就是$\phi(\frac{n}{i})$了)

经验告诉我们应该预处理出$f(n)$然后递推出所有答案,同样对于$f(n)$我们也得预处理,如果直接对于每个$n$求出约数来统计答案是不太可行的…然后就反过来枚举约数来不断更新$f(n)$

时间复杂度大概是$O(nlogn)$

#include<cstdio>
#include<cstring>
#include<algorithm> const int N= 4000005; typedef long long lint; lint n,tot;
lint pri[N],phi[N],f[N],ans[N];
bool p[N]; inline void init()
{
phi[1]=1;
for(register int i=2;i<N;i++)
{
if(!p[i])
{
pri[++tot]=i;
phi[i]=i-1;
}
for(register int j=1;j<=tot&&i*pri[j]<N;j++)
{
p[i*pri[j]]=1;
if(i%pri[j]==0){phi[i*pri[j]]=phi[i]*pri[j];break;}
else phi[i*pri[j]]=phi[i]*(pri[j]-1);
}
}
} int main()
{
init(); for(register int i=1;i<N;i++)
for(register int j=i*2;j<N;j+=i)f[j]+=i*phi[j/i]; for(register int i=1;i<N;i++)ans[i]=ans[i-1]+f[i]; while(scanf("%lld",&n)==1&&n)
printf("%lld\n",ans[n]); return 0;
}

本地预处理跑了5s…然后交到UVa上居然快的飞起…

最新文章

  1. js数组方法push pop shift unshift的返回值
  2. tomcat 5.5、6、7各版本的web-app标准
  3. Contacts群组添加成员,多选列表过滤已添加数据
  4. MAC电脑操作快捷键
  5. CSS居中初探
  6. USB挂起与唤醒.
  7. NoSQL 数据库的使用场景
  8. 终于解决“Git Windows客户端保存用户名与密码”的问题
  9. Swift -&gt; Optional嵌套 探讨
  10. 登录Windows界面前执行自定义脚本
  11. elasticsearch6.7 05. Document APIs(8)Multi Get API
  12. collections集合模块 [namedtuple,deque,*]
  13. spring-boot parent变更为依赖方式
  14. 关于VS2010的帮助文档更改路径
  15. Python3基础 hasattr 测试类是否有指定的类属性
  16. OC -网络请求 - NSURLConnection - POST
  17. api 和 C# 里的接口的区别?
  18. uniqid()
  19. python 类实例化,修改属性值
  20. Gym-101128D:Dice Cup

热门文章

  1. 如何合理的安排Folx的下载任务
  2. 带你入门Camtasia Studio录像机软件
  3. jenkins 中邮件发送
  4. appium每次运行不初始化
  5. VMW14.x虚拟机安装Mac10.13系统教程
  6. 【P4178】Tree——点分治
  7. C语言讲义——库函数排序qsort
  8. 拿到这份 Java、C++ 软件开发完整学习路线图,我面试再也没挂过..
  9. 交换机三种端口模式Access、Hybrid和Trunk
  10. Markdown 语法详解