質問するログイン新規登録
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Q&A

解決済

2回答

676閲覧

C#のBigIntegerで 「Xのp乗をdで割ったときの余り」 を出力する関数を作りたい

Ray_Rye

総合スコア1

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

0グッド

1クリップ

投稿2022/10/29 17:31

0

1

前提

C#初心者です、練習としてRSA暗号で暗号化・復号をするソフトを作っています。
RSAでの暗号化、復号にはどうしても冪乗余を出力するのが必要です。Pythonのpowのようにそれを出力する関数がC#では無かったので自作したいのですが、上手くアルゴリズムを組めません。どなたか良いアルゴリズムを教えて・考えていただけないでしょうか?

なお、普通に計算しようとするとあまりにも時間がかかりすぎてしまいます。また桁数が大きすぎて(大体20~30桁くらいです)intやdoubleでは収まらなかったので_System.Numerics_のBigIntegerを使用しています。

実現したいこと

  • 冪乗を割ったときの余りの出力

該当のソースコード

C#

1public static BigInteger powf(BigInteger X, BigInteger p, BigInteger d) 2{ 3 4}

試したこと

普通に計算
→時間がかかりすぎる

補足情報(FW/ツールのバージョンなど)

使用しているライブラリ:System.Numerics

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Ray_Rye

2022/10/30 00:11

え!まさかデフォルトのライブラリに入っていたんですか....気づきませんでした ありがとうございます。
Zuishin

2022/10/30 02:49

問題なければ自分で回答してそれをベストアンサーに選んでください。 獣パンツは何度も BAN されてるただの荒らしなので気にしなくて大丈夫です。
退会済みユーザー

退会済みユーザー

2022/10/30 02:50

Zuishin さんが紹介されたライブラリが質問者さんの目的に使えたら、回答欄にその旨書いて、マークをつけて、このスレッドはクローズ願います。
atcoderyellow

2022/10/30 04:56

嘘の噂を投稿するな。
guest

回答2

0

繰り返し二乗法を用いる。しかし、2乗を計算するたびにX^2をX^2 mod dに置き換える。

投稿2022/10/29 19:15

atcoderyellow

総合スコア481

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atcoderyellow

2022/11/01 14:56

無言低評価禁止
guest

0

自己解決

BigInteger.ModPowメソッドをZuishinさんより教えていただき、それを使用することで解決することができました。ありがとうございました!

投稿2022/10/30 13:46

Ray_Rye

総合スコア1

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.30%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問