题意简述
构造一个r行c列的矩阵,r,c<=500,满足:
不存在1<=i<=r,1<=j<=c,使得第i行所有数的gcd=第j列所有数的gcd(即:行,列gcd两两不同)多解输出任意一个。无解输出0。
思路框架
- 只有1x1的矩阵是无解的
- r=1的情况,显然只要令矩阵为[2,3,4…c+1]即珂。c=1同理。
- 别的情况,令第$i$行的$gcd$为$i$,第$i$列的$gcd$为$r+i$即珂。这样行,列的$gcd$正好是$1,2,3…r+c$,完美而潇洒。
具体思路
思考一个问题:如何令第$i$行的$gcd$为$i$,第$i$列的$gcd$位$r+i$?
那很简单,拿行举例:第$i$行的$gcd$为$i$,那就让每个数都是i乘上一个东西即珂。乘上的东西要互质。
如何保证互质呢?我们发现,此时$r,c>=2$,而连续的两个(或以上)个正整数之间,$gcd$肯定是$1$。所以我们只要让第$i$行为$c$个连续正整数即珂。列同理。
稍加思索,我们令第$i$行第$j$列为:$i*(j+r)$。这样,对于任意的$i$,第$i$行所有数都是$i$乘上$c$个连续的正整数;对于任意的$i$,第$I$列所有数都是$i$乘上$r$个连续的正整数。满足条件。
代码
1 |
|