ジム- 102021E:期限切れライセンス
の質問の意味:あなたはそれが出力2つの素数をすることができた場合に浮動小数点数の比は、代表素数の1組の割合を使用することができるかを決定できるようにする浮動小数点数の組を与えます。
分析:まず、(ダブルデータがintを変化させるように変換される)デジタルプロセスに文字列を変換するために、^ 6〜10で乗算し、次いでそれらの最大公約数の数を2で割った整数に統一最初の2つの数字が素数か否かを判断します。前記2つの数値が等しいとき、特殊なケースである直接2,2の出力を含みます
#include <iostreamの> する#include < 文字列・H> の#include < ストリング > の#include <アルゴリズム> の#include <math.h>の 書式#include < ストリング > の#include < 文字列・H> の#include <ベクトル> する#include <ユーティリティ> 書式#include <>マッピング する#include <キュー> の#include < 設定 > の#define MX 0x3f3f3f3f の#define LL長い長い 使って 名前空間はstdを、 const int型 MAXN = 1E7 +10 ; INTプリム[MAXN]、W [MAXN]、CNT = 0 ; // [i]は素数プリム示し、プリム[I] == 0 iはマーカーとして果たしている INT X [MAXN]; // X [i]は;偶数の2つの質量修飾Iの数は、x [i]とIX [i]がある表し 無効INITを() { memsetの(プリム、0、はsizeof (プリム)); のため(int型 I = 2 ; iはMAXNを<。 ++ I ) { IF(プリム[I])//は、iが偶数であるか否かを判断 続行; W [CNT ++] = I; // W預金プライム 用(INT J = I << 1; J <MAXN; = J + I)// 素数のすべての倍数にマークされた プリム[J] =を1 ; } } LL GCD(LL、LL B)// 公約数 { 戻り Bの== 0 A:? GCD(B、%のB); } ストリングS1、S2; int型のmain() { int型T; CIN >> T; のinit(); プリム[ 1 ] = 1 ; 一方(T-- ) { LL K1 = 0、K2 = 0、= POS1 。6、POS2 =6 ; // 先默认乘以10 ^ 6 CIN >> S1 >> S2; INT LEN1 = s1.length()。 INT LEN2 = s2.length()。 以下のために(int型私= 0 ; S1 [i]は、iが++ ) { 場合(S1 [I] =!' ' ) K1 = K1 * 10 +(S1 [i]が- ' 0 ' )。 他 POS1 = LEN1-I- 1 ; } のための(INT I = 0 ; S2 [i]はiは++ ) { もし!(S2 [I] = ' ' ) K2 = K2 * 10 +(S2 [i]が- ' 0 ' )。 他 POS2 = LEN2-I- 1 ; } 一方(POS1) { K1 = K1 * 10 。 POS1 - ; } 一方(POS2) { K2 = K2 * 10 。 POS2 - ; } 場合(K1 == K2) { COUT << 2 << ' ' << 2 << ENDL。 続け; } LLのTEMP = GCD(K1、K2)。 K1 = K1 / TEMP。 K2 = K2 / TEMP。 もし(プリム[K1] == 0 &&プリム[K2] == 0 ) COUT << K1 << ' ' << K2 << ENDL。 他の 裁判所未満 << "<< てendl; } 戻り 0 。 }