ABC266 B問題 Modulo Number【C++, python】

ABC266のB問題 Modulo Numberを解説します。

ポイント1: long long型
巨大な整数を扱うときはlong long型を利用しましょう。
int型では \( 10^9 \) くらいまでの整数を扱えます。
それより大きい整数を扱う場合はlong long型を利用します。

ポイント2: 剰余の計算
C++で剰余の計算を行うと、負の値となることがあります。
負の数に対して剰余の計算を行うと負の値となります。
それに対し、pythonでは正の値に収まります。
例をあげます。

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

int main() {
    cout << 73 % 10 << endl;    // 出力は3であり、正の数
    cout << (-73) % 10 << endl; // 出力は-3となり負の数
    return 0;
}
print(73 % 10)  # 出力は3
print(-73 % 10) # 出力は7, 正の数に収まる

入力例

998244354

C++での回答例

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

int main() {
    long long n;    // 巨大な整数を扱うときはlong long
    cin >> n;       // 入力の受け取り

    long long y = 998244353;    
    n %= y;
    if (n < 0) n += y;  // 剰余の計算後に負の値の場合、正の数にする
    cout << n << endl;
    return 0;
}

pythonでの回答例

n = int(input())    # int型と入力を受けるときはint()を利用する

y = 998244353
n %= y  # Pythonの剰余演算の結果は正の数となる
print(n)

コメント