Codeforces Round #701 D. Multiples and Power Differences LCM性质
传送门: https://codeforces.com/contest/1485/problem/D
题意
给一个 n ∗ m n*m n∗m的矩阵,每一位数都能乘任意倍数,且要满足相邻数的差绝对值是 k 4 ( k ≥ 1 ) k^4(k \ge 1) k4(k≥1),输出构造完的矩阵,并且构造之后的每一位数都不能大于1e6。
思路
这 题 只 要 想 到 了 就 没 什 么 难 度 , 感 觉 还 没 有 C 题 推 的 爽 。 这题只要想到了就没什么难度,感觉还没有C题推的爽。 这题只要想到了就没什么难度,感觉还没有C题推的爽。
每 一 位 都 ≤ 16 , 这 很 重 要 。 他 们 的 l c m 不 会 太 大 , 最 大 为 2 ∗ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 。 每一位都\leq 16,这很重要。他们的lcm不会太大,最大为2*3*5*7*11*13。 每一位都≤16,这很重要。他们的lcm不会太大,最大为2∗3∗5∗7∗11∗13。
当 k 可 以 为 0 的 时 候 , 直 接 输 出 l c m , 相 邻 差 为 0 4 . 当k可以为0的时候,直接输出lcm,相邻差为0^4. 当k可以为0的时候,直接输出lcm,相邻差为04.
但 是 k ≥ 1 , 没 关 系 , 我 们 隔 项 + a [ i ] [ j ] 4 就 行 , 这 样 相 邻 差 为 a [ i ] [ j ] 4 。 但是k \ge 1,没关系,我们隔项+a[i][j]^4就行,这样相邻差为a[i][j]^4。 但是k≥1,没关系,我们隔项+a[i][j]4就行,这样相邻差为a[i][j]4。
Code(124MS)
#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
ll a[505][505];
ll gcd(ll a, ll b) {
return b ? gcd(b, a % b) : a;
}
void solve() {
int n, m; cin >> n >> m;
ll g;
ll sum = 1;
for(int i = 1;i <= n; i++) {
for(int j = 1;j <= m; j++) {
cin >> a[i][j];
sum *= a[i][j];
if(i == 1 && j == 1) continue;
else if(i == 1 && j == 2){
g = a[1][1] * a[1][2] / gcd(a[1][1], a[2][2]);
}
else {
g = g * a[i][j] / gcd(g, a[i][j]);
}
}
}
for(int i = 1;i <= n; i++) {
for (int j = 1; j <= m; j++) {
if ((i + j) & 1) cout << g << " ";
else cout << g + a[i][j] * a[i][j] * a[i][j] * a[i][j] << " ";
}
}
cout << endl;
}
signed main() {
solve();
}