「3の100乗を19で割ったあまりは?」を4通りの方法で計算してみた。

 「3の100乗を19で割ったあまりは?」を4通りの方法で計算してみました。(^_^;
 はてなブックマークで『「3の100乗を19で割ったあまりは?」を4通りの方法で計算する』という記事を見かけたので、これを4通りの方法、こちらの場合は4つのプログラム言語(Python,Ruby,Java,VB)で計算してみました。(^_^;
 これって、「方法5」に当たるのでしょうか。「方法1:地道に計算する」があるんだったら、「方法5:プログラムを作って計算する」もあっていいんじゃなかな。(^_^;
 やっぱり、PythonRubyは楽でいいですね。VBJavaよりは少し楽かな。o(^-^)o
 ちなみに、Pythonは、「%( )」で、Rubyは、「%[ ]」の違いに注意です。
 また、VBのBigInteger構造体は.NET Framework 4より使用できるようになった構造体で、使用する場合は、System.Numerics.dllへの参照を追加する必要があり、vbc.exe コマンドで直接コンパイルする場合は /r:System.Numerics.dll オプションを指定します。

● ModPow3_100_19.py

# coding: UTF-8
# ModPow3_100_19.py

print("%s mod 19 = %s"%(3**100,3**100%19))

● ModPow3_100_19.rb

#! ruby -Ks
# ModPow3_100_19.rb

print "%s mod 19 = %s"%[3**100,3**100%19]

● ModPow3_100_19.java

/* 
 * ModPow3_100_19.java
 */

import java.math.*;

class ModPow3_100_19 {
    public static void main(String[] args) {
        BigInteger m = BigInteger.valueOf(3).pow(100);
        BigInteger n = new BigInteger("3").modPow(new BigInteger("100"),new BigInteger("19"));
        System.out.println(m+" mod 19 = "+n);
    }
}

● ModPow3_100_19.vb

' vbc.exe ModPow3_100_19.vb /r:System.Numerics.dll
Imports System
Imports System.Numerics

Module Module1
    Sub Main()
        Dim m as BigInteger = BigInteger.pow(3,100)
        Dim n as BigInteger = BigInteger.ModPow(3,100,19)
        Console.WriteLine("{0} mod 19 = {1}",m, n)
        'Console.WriteLine("{0} mod 19 = {1}",m, m mod 19)
    End Sub
End Module

●実行結果

515377520732011331036461129765621272702107522001 mod 19 = 16

※参考URL
多倍長整数型 (System.Numerics.BigInteger) - Programming/.NET Framework/数学関数・高度な数値型 - 総武ソフトウェア推進所
[C#]多倍長整数 System.Numerics.BigInteger を使ってみた

IDE を使う場合はプロジェクト名を右クリックして参照設定を選びます。csc.exe コマンドで直接コンパイルする場合は /r:System.Numerics.dll オプションを指定します。

知恵袋で見つけた「自然数を順番に並べた数」の問題をJavaで解いてみた。

数論への招待 (シュプリンガー数学クラブ)

数論への招待 (シュプリンガー数学クラブ)