Luogu 4388 付公主的矩形
还是挺妙的。
发现对于一个$r$行$c$列的矩阵,穿过的格子数$n = r + c - gcd(r, c)$,题目中其实给定了这个$n$,要我们计算满足这个式子的$r$和$c$的个数。
发现$n$一定要是$gcd(r, c)$的倍数,等式两边可以除掉这个$gcd(r, c)$,变成$n' = r' + c' - 1$。
那么这时候$gcd(r', c') = gcd(n' + 1 - r', c') = 1$。
根据辗转相减法,有$gcd(n' + 1, c') = 1$,而满足这个式子的$c'$的个数恰好是$\varphi (n' + 1)$。
于是可以开心地计算出$c'$的总数$sum = \sum_{d|n} \varphi (d + 1)$。
注意到这时$(n, n)$这一对数只算了一遍,所以最后的答案$ans = (sum + 1) / 2$。
线性筛一波就好啦,时间复杂度$O(n)$。
Code:
#include <cstdio>
#include <cstring>
using namespace std; const int N = 1e6 + ; int n, pCnt = , ans = , pri[N], phi[N];
bool np[N]; inline void sieve() {
phi[] = ;
for(int i = ; i <= n + ; i++) {
if(!np[i]) pri[++pCnt] = i, phi[i] = i - ;
for(int j = ; j <= pCnt && i * pri[j] <= n + ; j++) {
np[i * pri[j]] = ;
if(i % pri[j] == ) {
phi[i * pri[j]] = phi[i] * pri[j];
break;
}
phi[i * pri[j]] = phi[i] * phi[pri[j]];
}
}
} int main() {
scanf("%d", &n);
sieve();
for(int i = ; i <= n; i++)
if(n % i == ) ans += phi[i + ];
printf("%d\n", (ans + ) / );
return ;
}
Luogu 4388 付公主的矩形的更多相关文章
- P4388 付公主的矩形(gcd+欧拉函数)
P4388 付公主的矩形 前置芝士 \(gcd\)与欧拉函数 要求对其应用于性质比较熟,否则建议左转百度 思路 有\(n×m\)的矩阵,题目要求对角线经过的格子有\(N\)个, 设函数\(f(x,y) ...
- luogu4388 付公主的矩形
题面: 为了排解心中的怒气,她造了大量的稻草人来发泄.每天付公主都会把一些稻草人摆成一个R∗C的矩形,矩形的每个方格上都有一个稻草人.然后她站在这个矩形的左上角,向矩形的右下角射箭.付公主的箭术过人, ...
- [洛谷P4388] 付公主的矩形
18.09.09模拟赛T1. 一道数学题. 题目传送门 首先把对角线当成是某个点的移动轨迹,从左下到右上. 那么这个点每上升一个单位长度,就穿过一个格子. 每右移一个单位长度,也会穿过一个格子. 例外 ...
- luogu P4389 付公主的背包
传送门 神仙题鸭!orz dkw 暴力就是完全背包 而完全背包可以和生成函数扯上关系,记第i种物品质量为\(a_i\),那么这种物品的生成函数\(G(i)=\sum_{j=0}^{\infty}x^{ ...
- [luogu 4389] 付公主的背包
题意:求一个较大的多重背包对于每个i的方案数,答案对998244353取模. 思路: 生成函数: 对于一个\(V\) 设: \(f(x) = \sum_{i=0}^{oo} x ^ {V * i} = ...
- 洛谷 P4389 付公主的背包 解题报告
P4389 付公主的背包 题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装\(10^5\)大小的东西 付公主有\(n\)种商品,她要准备出摊了 每种商品体积为\(V_i\),都有\ ...
- LuoguP4389 付公主的背包【生成函数+多项式exp】
题目背景 付公主有一个可爱的背包qwq 题目描述 这个背包最多可以装10^5105大小的东西 付公主有n种商品,她要准备出摊了 每种商品体积为Vi,都有10^5105件 给定m,对于s\in [1,m ...
- 洛谷 4389 付公主的背包——多项式求ln、exp
题目:https://www.luogu.org/problemnew/show/P4389 关于泰勒展开: https://blog.csdn.net/SoHardToNamed/article/d ...
- luoguP4389 付公主的背包
luogu 显然这是个背包题 显然物品的数量是不用管的 所以考虑大小为\(v\)的物品可以装的体积用生成函数表示一下 \[ f(x)=\sum_{i=0}^{+\infty}x^{vi}=\frac{ ...
随机推荐
- Kattis - redblacktree Red Black Tree (树形背包)
问题:有一课含有n(n<=2e5)个结点的数,有m(m<=1000)个结点是红色的,其余的结点是黑色的.现从树中选若干数量的结点,其中红色的恰有k个,并且每个结点都不是其他任何另一个结点的 ...
- 455. Assign Cookies Add to List
Assume you are an awesome parent and want to give your children some cookies. But, you should give e ...
- Soldier and Badges (set的检索简单运用)
Colonel has n badges. He wants to give one badge to every of his n soldiers. Each badge has a coolne ...
- 《hadoop权威指南》关于hive的第一个小例子的演示
本文是<hadoop权威指南>关于hive的小例子,通过这个例子可以很好地看出来hive是个什么东西. 前提是已经配置好hive的远程连接版本的环境,我是用了MYSQL数据库保存元数据. ...
- 【转载】Linux 进程调度时间测量
测试Context Switch time(进程上下文切换时间) -------------------------------------------------- 创建两个进程(实时进程) ...
- Java基础--反射Reflection
Reflection 反射能在运行时获取一个类的全部信息,并且可以调用类方法,修改类属性,创建类实例. 而在编译期间不用关心对象是谁 反射可用在动态代理,注解解释,和反射工厂等地方. -------- ...
- Day2-Python基础2---字符编码与转码
详细内容http://www.cnblogs.com/yuanchenqi/articles/5956943.html 一.编码介绍: 1.基本概念: 在python 2中默认编码是 ASCII,而在 ...
- 2017-09-17 python 学习笔记
Mock 库 介绍: http://blog.csdn.net/chdhust/article/details/50663729 说明mock能做什么. 可以考虑在调试方法时使用 Mock 库
- 已有项目使用Asset Pipeline管理静态资源
1. 修改项目中指向静态资源文件的链接 a) 访问静态资源文件 <%= stylesheet_link_tag "application", media: " ...
- 问题:Oracle to_date;结果:oracle常用的时间格式转换
oracle常用的时间格式转换 1:取得当前日期是本月的第几周 SQL> select to_char(sysdate,'YYYYMMDD W HH24:MI:SS') from dual; T ...