题意:
给你一个区间[l,r],让你从小到大输出k^x,设y=k^x,要保证y在区间[l,r]中
题解:
就算k是最小的2也不需要枚举多少次就到long long的极限了,所以暴力没商量,根本不会TLE
然后就是爆long long处理,比如r特别大,当k^x=<r但是k^(x+1)就爆long long了,这个要注意一下
代码:
1 #include<stdio.h> 2 #include<string.h> 3 #include<iostream> 4 #include<algorithm> 5 #include<queue> 6 #include<map> 7 #include<vector> 8 #include<math.h> 9 #define mem(a,x) memset(a,x,sizeof(a)) 10 using namespace std; 11 typedef long long ll; 12 const int maxn=1200000+10; 13 const int mod=26; 14 const int INF=0x3f3f3f3f; 15 const int Times = 10; 16 const int N = 5500; 17 int main() 18 { 19 ll l,r,k; 20 cin >> l >> r >> k; 21 int isp = 0; 22 ll ans = 1; 23 while(1) 24 { 25 if( ans>=l && ans<=r ) 26 { 27 cout << ans << " "; 28 isp = 1; 29 } 30 if( r/ans<k ) // 即判断r<ans*k, 31 { 32 break ; // 因为ans*k可能越界,所有用除法判断 33 } 34 ans*=k; 35 } 36 if( isp==0 ) 37 { 38 cout << "-1" <<endl; 39 } 40 else 41 { 42 cout << endl; 43 } 44 return 0; 45 }
原文地址:https://www.cnblogs.com/kongbursi-2292702937/p/12678517.html
时间: 2024-11-09 09:55:08