P1447题解

题目链接

这道题是一道诡异的容斥题。首先我们要确定一个性质,也就是一个点对的gcd就是它的那条线上有几个点。例如点(4,2)到点(0,0)这条线上有2个点。

因此答案其实就是:

但是这样复杂度是不对的。我们可以考虑开一个数组存gcd为i的数对有几个,然后*2-1即可。我们如果不考虑重复的结果就是,但是如果有i的倍数就会有重复,因此我们要像埃氏筛一样把倍数全部给减掉。

最后公式就会变成:

cpp 复制代码
#include <bits/stdc++.h>
#define int long long
using namespace std;
const int N=1e5+10;
int n,m,dp[N],ans;
signed main(){
	cin>>n>>m;
	for(int i=max(n,m);i>=1;i--){
		dp[i]=(n/i)*(m/i);
		for(int j=i*2;j<=max(n,m);j+=i) dp[i]-=dp[j];
		ans+=(i*2-1)*dp[i];
	}cout<<ans;
	return 0;
}
相关推荐
linweidong4 小时前
C++ 模块化编程(Modules)在大规模系统中的实践难点?
linux·前端·c++
半桔9 小时前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
HABuo9 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
我在人间贩卖青春10 小时前
C++之多重继承
c++·多重继承
颜酱10 小时前
图结构完全解析:从基础概念到遍历实现
javascript·后端·算法
m0_7369191010 小时前
C++代码风格检查工具
开发语言·c++·算法
yugi98783810 小时前
基于MATLAB强化学习的单智能体与多智能体路径规划算法
算法·matlab
DuHz10 小时前
超宽带脉冲无线电(Ultra Wideband Impulse Radio, UWB)简介
论文阅读·算法·汽车·信息与通信·信号处理
Polaris北极星少女11 小时前
TRSV优化2
算法
代码游侠12 小时前
C语言核心概念复习——网络协议与TCP/IP
linux·运维·服务器·网络·算法