タイトル
解説
タイトル名がいい!
この質問は思考・数学の問題で、とてもわかりやすいです。
数は多くの数を乗算することで得られ、それを構成する各数はその構成要素と同じです。数値に\(k \)を掛けることは、その構成に\(k \)を加えることと同じです。次に、この質問を見てみましょう。
2人が\(AB \)でイニシャルが両方とも\(1 \)であるとすると、ゲームのラウンドで\(A \)にk を掛けると、\(k \)がその構成に追加され、同時に\(B \)成分は、2つの追加\(kは\)、\ (AB \)の合計は、3つ追加\(K \) 。明らかに\(A×B \)は\(AB \)を一緒に混合することと同等であり、すべての成分が一緒に混合されるため、\(A×B \)には3つの\(k \)が含まれている必要があります。次に、\(A×B \)が完全な3次数かどうかを判断するだけです。
それで、私は第一世代のコードを書きました:
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
char ch=getchar();
ll s=0,f=1;
while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}
return s*f;
}
int main(){
int T;
cin>>T;
while(T--){
ll a,b;
a=read();b=read();
ll u=a*b;
ll m=pow(u,(1.0/3))+0.5;//计算立方根
//注意变为整数时+0.5四舍五入
if(m*m*m!=u) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}
然后就WA了……
どこに問題がありますか?ああ、私たちは状況を無視しました。3つすべての\(k \)を数値に入れると、プログラムは\(Yes \)を出力しますが、実際にはこれは対象外です。また、条件のレイヤーを追加する必要があります。つまり、立方根は2つの数の因数\(AB \)です。
コード
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
inline ll read(){
char ch=getchar();
ll s=0,f=1;
while (ch<'0'||ch>'9') {if (ch=='-') f=-1;ch=getchar();}
while (ch>='0'&&ch<='9') {s=(s<<3)+(s<<1)+ch-'0';ch=getchar();}
return s*f;
}
int main(){
int T;
cin>>T;
while(T--){
ll a,b;
a=read();b=read();
ll u=a*b;
ll m=pow(u,(1.0/3))+0.5;
if(m*m*m!=u||a%m||b%m) cout<<"No"<<endl;
else cout<<"Yes"<<endl;
}
return 0;
}