// Copyright (C) 2026 Kiyotsugu Arai
// SPDX-License-Identifier: LGPL-3.0-or-later
// ModularInt.hpp
#ifndef CALX_MODULAR_INT_HPP
#define CALX_MODULAR_INT_HPP
// モジュラー整数クラス(C++20/23対応、コンセプト対応版)
//
// このファイルは、効率的なモジュラー整数演算を提供するクラステンプレートを定義します。
// ModularInt
は、素数Pを法とする剰余体Z/PZの要素を表現します。
// 基本的な算術演算(加算、減算、乗算、除算)、冪乗演算、比較演算をサポートします。
//
// 主な特徴:
// - テンプレートパラメータで法(モジュラス)を指定
// - C++20のコンセプトとの統合
// - 効率的な演算アルゴリズム
// - 代数的構造との統合(モノイド、群、リング、体)
// - ストリーム入出力サポート
//
// 使用例:
// ```
// ModularInt<1000000007> a = 42; // 42 mod 10^9+7
// ModularInt<1000000007> b = 987654321;
// auto c = a * b; // 41477417 mod 10^9+7
// auto d = a.pow(12345); // a^12345 mod 10^9+7
// ```
#include