Codeforces Round #701 D. Multiples and Power Differences LCM性质

博客介绍了Codeforces Round #701中D题目的解题思路。题目要求构造一个n*m矩阵,使得相邻元素之差的绝对值为k^4(k>=1),且所有元素不超过1e6。作者提到当k=0时,直接输出最大公约数(GCD)即可,但k>=1时,可以通过每隔一项加元素的四次方来满足条件。代码实现中,首先计算矩阵中所有元素的最小公倍数(LCM),然后根据奇偶位置插入LCM或LCM+元素的四次方来构造矩阵。
摘要由CSDN通过智能技术生成

Codeforces Round #701 D. Multiples and Power Differences LCM性质


传送门: https://codeforces.com/contest/1485/problem/D

题意

给一个 n ∗ m n*m nm的矩阵,每一位数都能乘任意倍数,且要满足相邻数的差绝对值是 k 4 ( k ≥ 1 ) k^4(k \ge 1) k4(k1),输出构造完的矩阵,并且构造之后的每一位数都不能大于1e6。

思路

这 题 只 要 想 到 了 就 没 什 么 难 度 , 感 觉 还 没 有 C 题 推 的 爽 。 这题只要想到了就没什么难度,感觉还没有C题推的爽。 C

每 一 位 都 ≤ 16 , 这 很 重 要 。 他 们 的 l c m 不 会 太 大 , 最 大 为 2 ∗ 3 ∗ 5 ∗ 7 ∗ 11 ∗ 13 。 每一位都\leq 16,这很重要。他们的lcm不会太大,最大为2*3*5*7*11*13。 16lcm23571113

当 k 可 以 为 0 的 时 候 , 直 接 输 出 l c m , 相 邻 差 为 0 4 . 当k可以为0的时候,直接输出lcm,相邻差为0^4. k0lcm04.

但 是 k ≥ 1 , 没 关 系 , 我 们 隔 项 + a [ i ] [ j ] 4 就 行 , 这 样 相 邻 差 为 a [ i ] [ j ] 4 。 但是k \ge 1,没关系,我们隔项+a[i][j]^4就行,这样相邻差为a[i][j]^4。 k1+a[i][j]4a[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();
}

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值