数论——莫比乌斯

37 篇文章 1 订阅

莫比乌斯
先上一个博客
吊打神犇的题解
其实和莫比乌斯一点关系也没有
正常的莫比乌斯是没有后面的 m i n ( n / i , m / j ) min(n/i,m/j) min(n/i,m/j)这个系数的,所以就不会了。。。。。
因为怎么消元都还至少要枚举两个数,即一定会炸
——————————————————————————————————————————————
遇到这种情况,
APIO的选手告诉我们好方法:打表
——————————————————————————————————————————————

打表

我们打出个暴力,然后让程序输出每个情况,作出一张表
然后我们惊奇地发现一个规律, a n s = n ∗ m \color{purple}ans=n*m%p ans=nm ! ! ! ! \color{orange}!!!! !!!!
要严谨的数学证明?不可能的,网上就没有一篇写数学证明的


在这里插入图片描述
我们理解一下原式的几何意义
g c d ( i , j ) 不 等 于 1 的 时 候 gcd(i,j)不等于1的时候 gcd(i,j)1则必有 g c d ( i / g c d ( i , j ) , j / g c d ( i , j ) ) ) = 1 gcd(i/gcd(i,j),j/gcd(i,j)))=1 gcdi/gcd(i,j),j/gcd(i,j)))=1即以前被算过
下证:
m i n ( n / i , m / j ) min(n/i,m/j) minn/i,m/j 表示矩阵[n,m]里有多少个以 ( i , j ) 为 斜 率 的 直 线 上 的 整 点 (i,j)为斜率的直线上的整点 (i,j)线
n / i , m / j n/i,m/j n/i,m/j 分别表示n,m中含有多少个i,j所以它们间的最小值即为(i,j)的整数倍
即矩阵中所有以(i,j)为斜率的点
在直角坐标系上表示出来,我们发现每个 g c d ( i , j ) = = 1 gcd(i,j)==1 gcd(i,j)==1点的斜率都会被计算一次,这个斜率上的所有的都会被计算一次,所以矩阵上所有的点都会被计算一次


结论

a n s = n ∗ m \color{purple} ans=n*m%p ans=nm
——————————————————————————————————————————————
接下来没什么好说的,上代码:

#include<bits/stdc++.h>
using namespace std;

typedef long long ll;
int n,m,p;
ll ans=0;
int main(){
	scanf("%d%d%d",&n,&m,&p);
    ans=1ll*n%p*(m%p)%p;
	printf("%lld\n",ans);
}

这道题也给我们一个启示,遇到数论题,不会做的时候,还是打表好

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值