
javaを勉強し始めて3ヶ月も経っていないド素人です。質問したいのは3つの整数を素因数分解を用いた最大公約数と最小公倍数を表示させるプログラムで 「// ?」 の所に何を入力すればいいのかわからい状態です。「// ?」に何を入力すれば良いのでしょうか?
あと「// ? 」以外にもおかしな所があれば教えてもらえるとうれしいです。
public class Main {
public static final int N = 1000;
public static final int COUNT = 168;
public static void main(String args[]){
int a = Integer.parseInt(args[0]);
int b = Integer.parseInt(args[1]);
int c = Integer.parseInt(args[2]);
int[] prime = new int[COUNT];
int count = 0;
for (int i = 0; i < N; i++) {
if (isPrime(i)) {
prime[count] = i;
count++;
}
}
int gcd = gcd3(a, b, c, prime);
System.out.println("Greatest common divisor of " + a + " and " + b + " and " + c + " : " + gcd);
int lcm = lcm3(a, b, c, prime);
System.out.println("Least common multiple of " + a + " and " + b + " and " + c + " : " + lcm);
}
public static boolean isPrime(int num){
if (num <= 1) {
return false;
} else {
for (int i = 2; i < num - 1; i++) {
if (num % i == 0) {
return false;
}
}
return true;
}
}
public static int[] primeFact(int num, int[] prime){
int[] Fact = new int[N];
for (int i = 0; i < prime.length; i++) {
if (num % prime[i] == 0) {
while (num % prime[i] == 0) {
Fact[i] += 1;
num = num / prime[i];
}
}
}
return Fact;
}
public static int gcd3(int a, int b, int c, int[] prime){
// ?
}
public static int lcm3(int a, int b, int c, int[] prime){
// ?
}
}
No.2ベストアンサー
- 回答日時:
a を素因数分解 → factA
b を素因数分解 → factB
c を素因数分解 → factC
factA/B/C より 2 の指数の最大値/最小値 → factD の 2 の指数
factA/B/C より 3 の指数の最大値/最小値 → factD の 3 の指数
...
factA/B/C より 997 の指数の最大値/最小値 → factD の 997 の指数
factD を数値に戻す → 最大公約数/最小公倍数
それ以外の点として
Nまでの素数の配列が new int[COUNT]
素因数分解の配列が new int[N]
なのはおかしい
No.3
- 回答日時:
……というか、「a, b, c の最大公約数」=「「a, b の最大公約数」と c の最大公約数」(も同様)だし、2項の最大公約数は素因数分解しなくてもユークリッドの互除法で出せてその結果から2項の最小公倍数が計算できるから、2項づつを順次計算していけば素因数分解した結果なんていらないと思うんですが、何が何でも素因数分解しなくてはならない理由はございますでしょうか。
http://ja.wikipedia.org/wiki/%E3%83%A6%E3%83%BC% …
No.1
- 回答日時:
例えば。
public static int gcd3(int a, int b, int c, int[] prime){
// ?
}
ですが。
(1) a,b,c, prime の4つの引数について。
それぞれが何であるか、理解できていますか?
(2)gcd3という名前から、3値の最大公約数を求める関数だと思われます。
では、 // ? の部分の内容を『日本語』で書けますか?
※ 英語や他の言語が得意なら、その言語でも結構です。
数学の試験のときに、紙と鉛筆で解こうとしたどうするか、を考えてみるのもよいでしょう。
目的から
public static int gcd3(int a, int b, int c, int[] prime){
return 「3つの整数を素因数分解を用いた最大公約数」
}
等と書ければ解決ですが、そうではありません。
よって、「3つの整数を素因数分解を用いた最大公約数」をより詳細にしていく必要があります。
例えば
public static int gcd3(int a, int b, int c, int[] prime){
「3つの整数を素因数分解」
return 「3つの素因数分解の結果から最大公約数を求める」
}
これでも不十分なので、それぞれをさらに詳細にしていきます。
...
とこれを繰り返して、言語で表現できるところまでにするのがプログラミングです。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Ruby 【JAVA】数字をひし形に出力するプログラムについて 2 2022/07/11 23:32
- Java java 入力 3 4 3 出力 ABC DEFG HIJ このようなプログラムの書き方を教えてくだ 2 2022/07/15 14:18
- Java javaでのプログラム(配列)について質問です. 2 2022/10/14 22:27
- Java Java プログラム public class Main { public static void 3 2023/08/10 23:46
- C言語・C++・C# C++プログラミングコードにポリモーフィズムを取り入れ方を教えてください。 2 2023/06/09 11:17
- C言語・C++・C# c言語の問題の説明、各所ごとに 5 2023/07/26 11:03
- C言語・C++・C# 質問です 下記のコードを分かりやすく解説お願いします 初心者です #include ‹stdio.h 3 2022/05/26 22:03
- C言語・C++・C# C言語でif文が予想と違う動きをする件について7 4 2023/03/20 00:26
- C言語・C++・C# プログラミング c言語 4 2023/03/07 01:05
- C言語・C++・C# C言語プログラム変更 2 2022/12/21 15:03
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
javaのパッケージについての質...
-
classを使って座標軸を求めるコ...
-
C#で実行時にメソッドの返り値...
-
String変数から数字以外を排除する
-
「配列定数は、イニシャライザ...
-
二分探索木で例えば1〜10の値を...
-
ArrayListなかへのArrayListオ...
-
行の途中から読み込む方法
-
マインスイーパーもどきをつく...
-
コード中の謎のエラー
-
javaでcsvファイル読込時の改行...
-
アンマネージDLLで、ダイアログ...
-
C#で「型または名前空間名 'int...
-
JSPやサーブレットでSystem.out...
-
InputStreamはreadが1回しかで...
-
イメージボタンを作成したいの...
-
【Java】再帰的なプログラムで...
-
C#で、あるクラスのメンバーす...
-
System.err. printlnとSystem.o...
-
stderrとstdout
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
「配列定数は、イニシャライザ...
-
メインが含まれていません
-
式の型は配列型で int に解決済...
-
Java 初心者 int型の取り扱い方
-
(Swing)JTextFieldを半角のみ入...
-
DataSet(DataTable)の使い方
-
javaでカレンダー作成
-
intが負の時に投げる例外はあり...
-
C#で実行時にメソッドの返り値...
-
JUnit4のアノテーションについて
-
6桁の数字を重複なしでランダム...
-
JAVA エラー 式の開始が不正で...
-
java spring でエラーが出て困...
-
C#でバブルソート
-
プログラムの作り方
-
全組み合わせの出力
-
SwingでJtableのヘッダ行が表示...
-
アンマネージDLLで、ダイアログ...
-
c# デリゲート関連の命名について
-
複数のボタンを配置し、それぞ...
おすすめ情報
(1)a,b,cは3つの整数でprimeは素数と考えてるのですが正しいでしょうか?
(2)a,b,cを素因数分解→a,b,cの共通の素数(指数が1の数字)を判別(if文?)する→判別した素数を掛けるといった感じでしょうか?
最大公約数なら primeFact で格納したFact[i]の指数1の共通素数を if文で探して掛ければいけるかな?と思ったのですがgcd3の中でFact[i]をどう使えばいいかよくわかってない感じです。