Mathパッケージ内でのmodの計算について

このQ&Aのポイント
  • m=12,n=3;と定義し、m.mod(n)で計算を行っていますが、エラーが発生します。
  • エラー文は「BigInteger: modulus not positive」です。
  • 正しいモジュラスの値を使用する必要があります。
回答を見る
  • ベストアンサー

Mathパッケージ内でのmodの計算について

最初に m=12,n=3; と定義しています。 while (n !=BigInteger.ZERO ) { BigInteger r =m.mod(n);←(1) m = n; n = r; } 私の頭では(1)のところでr =12.mod(3)よりr=0となり、ここでwhile文は終わると考えていたのですが、 Exception in thread "main" java.lang.ArithmeticException: BigInteger: modulus not positive at java.math.BigInteger.mod(Unknown Source) というエラー文が出てきました。どこがおかしいのかさっぱりなので助けてください。

  • Java
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
noname#49664
noname#49664
回答No.1

BigInteger m = new BigInteger("12"); BigInteger n = new BigInteger("3"); while (n.compareTo(BigInteger.ZERO) != 0) { BigInteger r =m.mod(n); m = n; n = r; System.out.println("m:" + m + ", n:" + n); } 「BigIntegerは数値ではない」ということを頭に入れておきましょう。BigIntegerはプリミティブ型ではなく、「オブジェクト」です。比較する場合はcompareToなど、そのためのメソッドを使わないといけないでしょう。2つのインスタンスを==や!=できちんと比較できないのと同じです。

関連するQ&A

  • 先に計算したほうがいいのでしょうか?

    下記のプログラムを作ったのですが、 Math.PI / 180 の部分は先に計算しておいたほうが処理が 早くなると言われたのですがそうなのでしょうか? 先に掛け算をしないといけないような気がするのですが。 import java.awt.Color; import java.awt.Graphics2D; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; import java.lang.Math; public class Test9 { public static void main(String[] args) { int r = (args.length > 0)? Integer.parseInt(args[0]):100; int n = (args.length > 1)? Integer.parseInt(args[1]):16; int x, y, x1, y1; try { BufferedImage image=new BufferedImage(r*2+10,r*2+10,BufferedImage.TYPE_INT_RGB); Graphics2D g2d=image.createGraphics(); g2d.setBackground(Color.WHITE); g2d.clearRect(0,0,r*2+10,r*2+10); g2d.setColor(Color.BLACK); for ( double i = 0.0; i < 360.0; i += 360.0 / n ) { x1 = (int) ( r * Math.cos( i * Math.PI / 180 ) ); y1 = (int) ( r * Math.sin( i * Math.PI / 180 ) ); for( double j = i + 360 / n; j < 360.0; j += 360.0 / n ) { x = (int) ( r * Math.cos( j * Math.PI / 180 ) ); y = (int) ( r * Math.sin( j * Math.PI / 180 ) ); g2d.drawLine( x1 + r + 5, y1 * (-1) + r + 5, x + r + 5, y * (-1) + r + 5 ); } } ImageIO.write(image, "JPEG", new File("c:\\test9.jpg")); } catch(Exception e) { e.printStackTrace(); } } }

    • ベストアンサー
    • Java
  • javaでべき乗余

    テストプログラムとしてjavaでべき乗余を求めるプログラムを作っているんですがint N の大きさを大きくするとかなり時間がかかってしまいます。実行時間を早くする方法はないでしょうか? import java.math.BigInteger; import java.util.Random; public class s1{ public static void main(String args[]){ BigInteger a = new BigInteger("2"); int N = 100000; BigInteger n,p,q; Random rnd = new Random(); BigInteger f[] = new BigInteger[N]; int bit = 512; int k = 10; p = new BigInteger(bit,k, rnd); q = new BigInteger(bit,k, rnd); n = p.multiply(q); int j; for(j=0;j<N;j++){ f[j]=(a.modPow(BigInteger.valueOf(j), n)) ; } for(j=0;j<N;j++){ System.out.println(j +"="+f[j]); } } }

    • ベストアンサー
    • Java
  • Java:packageについて

    いつもお世話になっております。 Javaのpackage機能について教えていただけますでしょうか。 ただいまJavaの勉強中で、本を購入し、それを基にソースを書いたり動かしております。 その中にpackage機能について説明とサンプルソースがあるのですが、 本のまま書いてもエラーで動きません。本とソースを見比べても相違が見られないため 何が原因かも分からず、困っております。 内容 ・Cドライブ直下にwork3というフォルダを作成 ・work3直下にMain.javaを作成する。 ・work3の中にconverterというフォルダを作成する。 ・converterフォルダ内にDollar.javaとEuro.javaを作成する。 ・コマンドプロンプトにてc:\work3に移動し、Javac **.javaを実行後、java Mainを実行する。 コンパイルは成功し、それぞれのclassファイルは作成されております。 実行すると C:\work3>java Main Exception in thread "main" java.lang.NoClassDefFoundError: Main (wrong name: con verter/Main) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClassCond(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$000(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Could not find the main class: Main. Program will exit. とエラーが出て実行されません。 実際のソースです。 ****************** package converter; public class Dollar {  public static int toYen(int dollar){  return dollar * 90;  } } ****************** package converter; public class Euro {  public static int toYen(int euro){   return euro * 120;  } } ****************** package converter; class Main {  public static void main(String[] args){   System.out.println("1ドルは" + Dollar.toYen(1) + "円です。");   System.out.println("1ユーロは" + Euro.toYen(1) + "円です。");  } } ****************** ちなみにですが、3つのソースはjarファイルの実習で使用し、うまく動いてくれました。 packageの実習でpackage ***を一行追加しただけです。 よろしくお願いいたします。

    • ベストアンサー
    • Java
  • java.lang.NoClassDefFoundError。。。

    どうぞ知恵をお貸しください。 ・jdk-1.5.0.16 ・mysql-4.0.26-win32 ・mysql-connector-java-3.1.14 ・eclipse 3.2.0 をダウンロード、インストールしてjavaの勉強を行っています。 コマンドプロンプトよりコンパイルを成功した場合は実行時に下記のエラーが、 Exception in thread "main" java.lang.NoClassDefFoundError コンパイルに失敗した場合は「読み込めません」のエラーが出力されます。 環境変数でCLASSPATHも設定してありますが、あえて実行時にclasspathを指定しても試みてみましたがエラーは変わりません。 何が原因なのでしょうか? どうぞご指導をよろしくお願いします。 エラー全文 Exception in thread "main" java.lang.NoClassDefFoundError: sample (wrong name: mypackage/sample) at java.lang.ClassLoader.defineClass1(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source)

  • eclipse java oracle 接続について

    同じような質問があり、試してみたのですができませんでした 初心者なので、勉強不足だとは思っていますがどうかヨロシクお願いします Exception in thread "main" java.lang.ClassNotFoundException: oracle.jdbc.driver.OracleDriver at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Unknown Source) at Oracletest.main(Oracletest.java:11) というエラーがでています オラクルのドライバが探せていないのはわかるのですがPATHも通しているので手詰まりになってしまいました ちなみに オラクル 10g java 1.5.0_09 を使っています 詳しい設定方法を教えて下さると助かります よろしくお願いします

  • マインクラフトのMODでクラッシュしてしまいました

    日本語MODを入れたらクラッシュしました txtに書かれている通りにやったのにクラッシュしてしまいました .minecraftのmodsファイルに入れました --- BEGIN ERROR REPORT 23bc01b6 -------- Generated 12/11/08 21:03 - Minecraft Version: 1.4.2 - Operating System: Windows 7 (x86) version 6.1 - Java Version: 1.6.0_31, Sun Microsystems Inc. - Java VM Version: Java HotSpot(TM) Client VM (mixed mode), Sun Microsystems Inc. - Memory: 482534576 bytes (460 MB) / 519110656 bytes (495 MB) up to 1037959168 bytes (989 MB) - JVM Flags: 2 total; -Xms512m -Xmx1024m - AABB Pool Size: 0 (0 bytes; 0 MB) allocated, 0 (0 bytes; 0 MB) used - ModLoader: Mods loaded: 2 ModLoader 1.4.2 GuiControlsFix 1.4.2-1 java.lang.VerifyError: (class: mod_NihongoInput, method: onTickInGUI signature: (FLnet/minecraft/client/Minecraft;Lvl;)Z) Incompatible argument to function at java.lang.Class.getDeclaredFields0(Native Method) at java.lang.Class.privateGetDeclaredFields(Unknown Source) at java.lang.Class.getDeclaredFields(Unknown Source) at ModLoader.setupProperties(ModLoader.java:1965) at ModLoader.addMod(ModLoader.java:373) at ModLoader.readFromModFolder(ModLoader.java:1381) at ModLoader.init(ModLoader.java:901) at ModLoader.addAllRenderers(ModLoader.java:215) at azw.<init>(RenderManager.java:92) at azw.<clinit>(RenderManager.java:14) at net.minecraft.client.Minecraft.a(SourceFile:259) at net.minecraft.client.Minecraft.run(SourceFile:515) at java.lang.Thread.run(Unknown Source) --- END ERROR REPORT d3484924 ---------- 原因がわかる方いらっしゃいませんか? よろしくお願いします

  • 数学的帰納法の証明問題

    代数学の問題で数学的帰納法を使った証明問題で躓いてしまいました。 問題の最初でわからないため、その後の問題も同じく解くことができません。 どなたかアドバイスをしていただけないでしょうか。 問1:自然数mに対して 5^2^m≡1 (mod 2^(m+2) ), /≡1 (mod 2^(m+3) )   (後者 /≡は「合同ではない」ってことです) であることをmに関する数学的帰納法で示せ。 問2:1の結果を利用して 5^2^(n-2) ≡ 1 (mod 2^n) (n≧2), 5^2^(n-3) /≡1 (mod 2^n) (n≧3) であることを示せ 問3 5^2^(m-1) ≡ -1(mod 2) (m≧1), 5^2^(m-1) /≡-1(mod 2^n) (m≧1,n≧2) を示せ。 現在問1の解き方として m=1で成り立つことを証明する。 m=r とし 5^2^r≡1 (mod 2^(r+2) ), /≡1 (mod 2^(r+3) ) が成立すると仮定し、 両辺にある数を加えたりかけたりして m=r+1 つまり 5^2^(r+1)≡1 (mod 2^(r+3) ), /≡1 (mod 2^(r+4) )になることを証明できれば すべての自然数mに対して成立することが証明できると思います。 ただ、m=rからどうやればm=r+1につなげられるかわかりません。 どなたかご指導のほどよろしくお願いします。

  • JavaでBase64をエンコード・デコード(長めです)

    初めまして。今,Javaの勉強をしています。 Base64のエンコード・デコードを行うプログラムをコマンドプロンプトでコンパイルまでは成功するのですが,いざ実行してみると >java Base64 Exception in thread "main" java.lang.NoClassDefFoundError: Base64 (wrong name: d escriber/Base64) at java.lang.ClassLoader.defineClass0(Native Method) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClassInternal(Unknown Source) というエラーがでます。 プログラムは下記のサイトを参考にさせていただきました。 http://www.ki.rim.or.jp/~kuro/Java/Etc/Etc-03-SunMisc.html クラス名とファイル名は同じはずなのですが…。 実行方法が悪いのかどうなのかわかりませんが,よろしければ指摘お願いします 。 わかりにくい文章ですみません。。

    • ベストアンサー
    • Java
  • CLASSPATHいじったらコンパイルエラー

    今までちゃんと動いていたプログラムが動かなくなりました。 原因が分かりません。どなたか教えてください。 環境------------ WinXP Eclipse Indigo JDK 1.6.0_2 --------------- やったこと 1.環境変数CLASSPATHを設定 2.CLASSPATHを削除 3.Windows再起動 これをやったら今まで動いてたやつが以下のエラーで コンパイルできなくなりました(;;) java.lang.NoClassDefFoundError: Print Caused by: java.lang.ClassNotFoundException: Print at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) Exception in thread "main" 不要と思いますがソースもノッケテおきます。 -*-*-*-*-*-*-*-*-*-*- public class Print { public static void main(String[] args) { try{ int n[] = {1,2,3}; for (int i = 0; i < 10; i++){ System.out.println(n[i]); } } catch(ArrayIndexOutOfBoundsException e){ System.out.println("配列の範囲を超えています"); } System.out.println("終了しまーす"); } } -*-*-*-*-*-*-*-*-*-*- よろしくお願いします。

    • ベストアンサー
    • Java
  • コマンドプロンプトのエラーについて

    コマンドプロンプトを実行すると以下のようなエラー文が出ました。 Exception in thread "main" java.lang.IllegalArgumentException: cannot add to lay out: unknown constraint: Canter at java.awt.BorderLayout.addLayoutComponent(Unknown Source) at java.awt.BorderLayout.addLayoutComponent(Unknown Source) at javax.swing.JRootPane$1.addLayoutComponent(Unknown Source) at java.awt.Container.addImpl(Unknown Source) at java.awt.Container.add(Unknown Source) at calendar.<init>(calendar.java:49) at calendar.main(calendar.java:78) 本などで、自分なりに調べたのですが解決できずに困っています。 原因が分かる方、いらっしゃいましたらご回答いただけますか?

専門家に質問してみよう