#include <iostream>#include <string>#include <cmath>usingnamespacestd;boolisPrime(longlongnumber){if(number<=1)returnfalse;if(number==2)returntrue;if(number%2==0)returnfalse;for(longlongi=3;i<=sqrt(number);i+=2){if(number%i==0)returnfalse;}returntrue;}intmain(){stringlargeNumber;cout << "Enter a large number: ";cin >> largeNumber;intprimeSubstringCount=0;for(size_ti=0;i < largeNumber.length();++i){for(size_tj=i+1;j<=largeNumber.length();++j){stringsubstring=largeNumber.substr(i,j-i);longlongnumber=stoll(substring);if(isPrime(number)){primeSubstringCount++;cout << "Prime substring: " << substring << endl;}}}cout << "Total number of prime substrings: " << primeSubstringCount << endl;return0;}
回答
この C++ コードは、大きな数値の中で素数の部分文字列を効率的にチェックします。これを Java に変換するには、非常に大きくなる可能性がある数値を処理するためのデータ型を慎重に検討する必要があります。この目的のために BigInteger を使用します。Java の同等のコードは次のとおりです。
importjava.math.BigInteger;importjava.util.Scanner;publicclassPrimeSubstrings{publicstaticbooleanisPrime(BigIntegernumber){if(number.compareTo(BigInteger.ONE)<=0)returnfalse;if(number.equals(BigInteger.valueOf(2)))returntrue;if(number.mod(BigInteger.valueOf(2)).equals(BigInteger.ZERO))returnfalse;for(BigIntegeri=BigInteger.valueOf(3);i.compareTo(number.sqrt())<=0;i=i.add(BigInteger.valueOf(2))){if(number.mod(i).equals(BigInteger.ZERO))returnfalse;}returntrue;}publicstaticvoidmain(String[]args){Scannerscanner=newScanner(System.in);System.out.print("Enter a large number: ");StringlargeNumber=scanner.nextLine();intprimeSubstringCount=0;for(inti=0;i < largeNumber.length();++i){for(intj=i+1;j<=largeNumber.length();++j){Stringsubstring=largeNumber.substring(i,j);BigIntegernumber=newBigInteger(substring);if(isPrime(number)){primeSubstringCount++;System.out.println("Prime substring: " << substring);}}}System.out.println("Total number of prime substrings: "+primeSubstringCount);scanner.close();}}
変換プロセスの説明:
ヘッダーと名前空間: C++ の #include ディレクティブは、Java の import ステートメントに置き換えられます。Java では using namespace std; は必要ありません。明示的に完全修飾名を使用します(例: BigInteger.valueOf(2))。
データ型: 重要な変更は、Java では long long の代わりに BigInteger を使用することです。これにより、ラージ インプットを処理する C++ コードの機能をミラーリングして、オーバーフローの問題なしで任意の大きな数値を処理できるようになります。