【质因子】CF834 div2 D. Make It Round

傷城~ 2024-03-22 10:23 162阅读 0赞

Problem - D - Codeforces

题意:

4fc4b272648e463b88fd5aba2c4d8ff5.png

思路:

首先是个常识:一个数末尾0的个数取决于{2,5}这一对的数量

那么考虑统计n的2和5的质因子数量,然后贪心

先把5这个质因子搞饱和了,因为*2比较小

然后把2这个质因子搞饱和

最后再*10到不能乘为止

因为要最接近m,因此最后还得乘m/d

Code:

  1. #include <bits/stdc++.h>
  2. #define int long long
  3. using namespace std;
  4. using i64 = long long;
  5. const int mxn=1e2+10;
  6. int N,n,m;
  7. void solve(){
  8. cin>>n>>m;
  9. N=n;
  10. int cnt2=0,cnt5=0;
  11. while(n%2==0){
  12. n/=2;
  13. cnt2++;
  14. }
  15. while(n%5==0){
  16. n/=5;
  17. cnt5++;
  18. }
  19. //cout<<cnt2<<" "<<cnt5<<'\n';
  20. int d=1ll;
  21. while(cnt2<cnt5&&d*2<=m) d*=2,cnt2++;
  22. while(cnt5<cnt2&&d*5<=m) d*=5,cnt5++;
  23. while(d*10<=m) d*=10;
  24. int t=m/d;
  25. d*=t;
  26. cout<<N*d<<'\n';
  27. }
  28. signed main(){
  29. ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
  30. int __=1;cin>>__;
  31. while(__--)solve();return 0;
  32. }

发表评论

表情:
评论列表 (有 0 条评论,162人围观)

还没有评论,来说两句吧...

相关阅读