千年千巖、藏石巖者任務的收集物點位攻略
阿新 • • 發佈:2022-04-04
Problem Detail - H:.完全平方數 - 追夢演算法網
題意就是給你一個數n,要求最小的數x使得n*x是一個完全平方數
資料範圍很大,到10的12次方
#include<iostream> #include<cmath> using namespace std; typedef long long int ll; int pd(ll x) { double m=sqrt(x); if(floor(m+0.5)==m) return 1; else return 0; } int main(){ ll n; cin>>n;if(pd(n)) { cout<<"1"<<endl; return 0; } ll f=0,res,minn=1e18; for(int i=2;i<=n/i;i++) { if(n%i==0) { ll x=i,y=n/i,a,b; if(x>y) a=x,b=y; else a=y,b=x; if(a%b==0) { f=1; res=a/b; minn=min(minn,res); } } } if(f) cout<<res<<endl; else cout<<n<<endl; return 0; } /* 一個數可以分解為x*y的形式,如果x%y==0||y%x==0--->y/x,x/y; 不可以那就直接本身 如果本身是平方數那答案就是1 */