C++ を Java に変換する

機能を維持しながら C++ コードを Java に変換する

モデルにクエリを直接実行して、返された結果をテストできます。その場合、Cloud コンソールでさまざまなパラメータ値を使用することも、Vertex AI API を直接呼び出すこともできます。

システム指示

Java と C++ に精通した熟練したプログラマーであり、これらの 2 つの言語間のコード変換に重点を置いています。変換プロセスを説明し、特に指定がない限り、変換されたコードが元のコードと一致するようにします。

自由形式のプロンプト

次の C++ コードを Java に変換してください。素数チェックに Java の BigInteger クラスを使用して、C++ の isPrime 関数と同等の関数を実装します。

#include <iostream>
#include <string>
#include <cmath>

using namespace std;

bool isPrime(long long number) {
  if (number <= 1) return false;
  if (number == 2) return true;
  if (number % 2 == 0) return false;
  for (long long i = 3; i <= sqrt(number); i += 2) {
    if (number % i == 0) return false;
  }
  return true;
}

int main() {
  string largeNumber;
  cout << "Enter a large number: ";
  cin >> largeNumber;

  int primeSubstringCount = 0;

  for (size_t i = 0; i < largeNumber.length(); ++i) {
    for (size_t j = i + 1; j <= largeNumber.length(); ++j) {
      string substring = largeNumber.substr(i, j - i);
      long long number = stoll(substring);

      if (isPrime(number)) {
        primeSubstringCount++;
        cout << "Prime substring: " << substring << endl;
      }
    }
  }

  cout << "Total number of prime substrings: " << primeSubstringCount << endl;

  return 0;
}

レスポンス

C++ コードは、大きな数値内の素数のサブ文字列を効率的にチェックします。これを Java に変換するには、非常に大きな数値を処理するデータ型を慎重に検討する必要があります。この目的で BigInteger を使用します。Java の同等コードは次のとおりです。

import java.math.BigInteger;
import java.util.Scanner;

public class PrimeSubstrings {

    public static boolean isPrime(BigInteger number) {
        if (number.compareTo(BigInteger.ONE) <= 0) return false;
        if (number.equals(BigInteger.valueOf(2))) return true;
        if (number.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO)) return false;
        for (BigInteger i = BigInteger.valueOf(3); i.compareTo(number.sqrt()) <= 0; i = i.add(BigInteger.valueOf(2))) {
            if (number.mod(i).equals(BigInteger.ZERO)) return false;
        }
        return true;
    }

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter a large number: ");
        String largeNumber = scanner.nextLine();

        int primeSubstringCount = 0;

        for (int i = 0; i < largeNumber.length(); ++i) {
            for (int j = i + 1; j <= largeNumber.length(); ++j) {
                String substring = largeNumber.substring(i, j);
                BigInteger number = new BigInteger(substring);

                if (isPrime(number)) {
                    primeSubstringCount++;
                    System.out.println("Prime substring: " << substring);
                }
            }
        }

        System.out.println("Total number of prime substrings: " + primeSubstringCount);
        scanner.close();
    }
}

コンバージョン プロセスの説明:

  1. ヘッダーと名前空間: C++ の #include ディレクティブは、Java の import ステートメントに置き換えられます。Java では using namespace std; は必要ありません。完全修飾名(BigInteger.valueOf(2))。

  2. データ型: 重要な変更は、Java で long long の代わりに BigInteger を使用することです。これにより、オーバーフローの問題なしで任意の大きな数値を処理できます。これは、C++ コードが大きな入力を処理する機能に似ています。

  3. isPrime 関数: isPrime 関数のロジックはほぼそのままです。主な違いは次のとおりです。

    • 比較: <===% の代わりに、BigInteger クラスの compareTo()equals()mod() メソッドを使用します。
    • 平方根: number.sqrt() を使用して、ループの上限の平方根を効率的に計算します。
  4. 文字列操作: C++ の substr は、Java の substring に直接相当します。

  5. 入出力: C++ の coutcin は、それぞれ Java の System.out.print クラスと Scanner クラスに置き換えられています。リソースを解放するには、Scanner を閉じてください。

  6. エラー処理: 入力文字列が有効な数値でない場合、Java コードは潜在的な NumberFormatException を暗黙的に処理します。必要に応じて、より堅牢なエラー処理を追加できます。

この Java コードは、指定された C++ コードと同等の機能を備えており、BigInteger を使用して大きな数値を効果的に処理します。コア アルゴリズムは変更されていないため、翻訳は元の意図に忠実です。

モデル: gemini-1.5-flash-002
温度: 0.2
最大出力トークン: 8192
TopK: 40.0
TopP: 0.95