fzu2125

来源:互联网 发布:吉他品牌 知乎 编辑:程序博客网 时间:2024/05/22 08:04

用i来模拟s(x,m),因为s(x,m)有个范围的!想一想如果10个9相加是多少,才90。

然而如果s(x,m)取到了90,可想而知x此时有多大了!

所以就可以枚举s(x,m)的取值!



#include<iostream>#include<algorithm>#include<math.h>using namespace std;int s(__int64 x,__int64 m){int ss=0;while(x){ss+=x%m;x=x/m;}return ss;}int main(){int t,i;__int64 n,m,x;cin>>t;while(t--){int f=0;cin>>n>>m;for(i=1;i<100;i++) //用i来模拟s(x,m),因为s(x,m)有个范围的! {x=(-i+sqrt(i*i+4*n))/2;if(x*x+s(x,m)*x-n==0){f=1;break;}}if(f==1)cout<<x<<endl;elsecout<<"-1"<<endl;}}


0 0
原创粉丝点击