3 solutions
-
0
分类讨论:
当 是一位数时,必有 。这一部分可以特判掉()。
当 为至少三位的数,。此时一定有 。循环解决。
否则, 是两位数,则:
因此可以枚举 的因数进行判断。
总时间复杂度 ,可以通过。#include<bits/stdc++.h> #define please using #define dont namespace #define copy std please dont copy; long long f(long long b,long long n){ if(n<b)return n; return f(b,n/b)+n%b; } int main(){ long long n,s; scanf("%lld%lld",&n,&s); if(n<s){ puts("-1"); return 0; } if(n==s){ printf("%lld",n+1); return 0; } long long x=sqrt(n)+1; for(long long i=2;i<=x;i++){ if(f(i,n)==s){ printf("%lld",i); return 0; } } long long ans=0; for(long long i=1;i<=x;i++){ if((n-s)%i)continue; if(f((n-s)/i+1,n)==s)ans=(n-s)/i+1; } if(ans==0)puts("-1"); else printf("%lld",ans); }
Information
- ID
- 608
- Time
- 1000ms
- Memory
- 256MiB
- Difficulty
- 8
- Tags
- (None)
- # Submissions
- 42
- Accepted
- 8
- Uploaded By