题面:

为了排解心中的怒气,她造了大量的稻草人来发泄。每天付公主都会把一些稻草人摆成一个R∗C的矩形,矩形的每个方格上都有一个稻草人。然后她站在这个矩形的左上角,向矩形的右下角射箭。付公主的箭术过人,她能穿透任意多的稻草人。弓箭经过的方格上的稻草人难逃厄运,报废掉了。看着被毁坏的稻草人,付公主开心了一些。

但是制造稻草人需要大量的金钱,所以付公主不希望坏掉太多的稻草人,所以她每天都选择毁坏掉N个稻草人。付公主还是个喜新厌旧的人,她希望每天能看到一种不同的稻草人摆放矩形。矩形是可以旋转的,即R∗C和C∗R等价。她毫不费力地算出了摆放方案数,于是她决定刁难你一下。不甘示弱的你决定写个程序计算这个数来提交付公主的答卷。

数学题。。。

(懵逼*INF)

!震惊,竟是欧拉函数!

先分析一下,对于一对a、b,经过的格数为 a+b-gcd(a,b),具体证明:

每向右移一个则+1;

每向下移一个则+1;

每经过一个整点则-1;

因此为a+b-gcd(a,b);

因此有n = a+b-gcd(a,b);(易证gcd是n的约数)

同除gcd(a,b),得

(n/gcd(a,b)) = a+b-1;(这里a = a/gcd(a,b),b = b/gcd(a,b))

设m=n/gcd(a,b);

m+1 = a+b;

这里m是n的因数,a、b互质。

找n的因数,再加一,求欧拉函数,求和。

但是会有重复(a、b是一对),所以ans先加一再>>1。(+1是a=n,b=n只算了一次)

代码:

#include<cstdio>
#define N 100000050
int n,cri[N],phi[N],cnt;
bool vis[N];
int ans = ;
void oula()
{
phi[] = ;
for(int i=;i<=n+;i++)
{
if(!vis[i])
{
phi[i]=i-;
cri[++cnt] = i;
}
if(n%(i-)==)ans+=phi[i];
for(int j=;j<=cnt&&i*cri[j]<=n+;j++)
{
vis[i*cri[j]]=;
if(i%cri[j]==)
{
phi[i*cri[j]]=phi[i]*cri[j];
break;
}else
{
phi[i*cri[j]]=phi[i]*phi[cri[j]];
}
}
}
}
int main()
{
// freopen("chord.in","r",stdin);
// freopen("chord.out","w",stdout);
scanf("%d",&n);
oula();
printf("%d\n",(ans+)>>);
return ;
}

最新文章

  1. 转载:gulp文件
  2. 图解jmeter压测http接口
  3. Form的enctype=&quot;multipart/form-data&quot;作用
  4. 百度在线编辑器UEditor(v1.3.6) .net环境下详细配置教程
  5. 突然发现这周有点忙。。着玩-PHP进阶
  6. C语言的数据类型
  7. wireshark保存部分报文的方法
  8. 在MyEclipse环境下写Struts,删除项目不干净的问题的解决
  9. 可编辑DIV (contenteditable=&quot;true&quot;) 在鼠标光标处插入图片或者文字
  10. 转 Oracle 12C 之 CDB/PDB用户的创建与对象管理
  11. 进入IT行业四月后的感想(生活日志)欢迎评论
  12. Asp.Net MVC 捆绑(Bundle)
  13. 使用mpVue开发小程序实战总结
  14. CF&amp;&amp;CC百套计划4 Codeforces Round #276 (Div. 1) A. Bits
  15. tikv 安装
  16. spring boot 在什么时候启动的tomcat
  17. Django一些技巧
  18. Deep Residual Learning for Image Recognition论文笔记
  19. StyleCop setting
  20. LeetCode OJ:Remove Element(移除元素)

热门文章

  1. CodeForces 723D Lakes in Berland (dfs搜索)
  2. 使用 MongoDB 存储商品分类信息
  3. E20180219-hm-xa
  4. 用WEKA进行数据挖掘
  5. 洛谷 P2617 Dynamic Rankings || ZOJ - 2112
  6. magento 自建插件通道服务
  7. Hibernate3中重复引用hbm文件错误信息记录
  8. Android内存堆上限Android的缺省值是16M(某些机型是24M)
  9. .net主站和二级域名下实现session共享
  10. Maximum Subsequence Sum 最大子序列和的进击之路