嵊州普及Day5T4
题意:两个1,每次可将一个*k,一个*K2,n个问题,问能否达成x,y?
思路:只有将x,y相乘为3次方时,才可能。并且相乘的三次方一定要是x,y的因子。
下面证明:3次方易证,因为对每个k,都会乘三次。
那么x,y都应当有每个k相乘做因子,第二点亦得证。
见代码:
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> using namespace std; int n,x,y,g; bool three(int a) { int i=1; while(pow(i,3)<a) i++; if(pow(i,3)==a) { g=i; return true; } else return false; } int main() { cin>>n; for(int i=1;i<=n;i++) { cin>>x>>y; if(three(x*y)&&x%g==0&&y%g==0) cout<<"Yes"<<endl; else cout<<"No"<<endl; } return 0; }
好题哉!!!