洛谷P2699小浩的幂次运算

二分走一波,没想到题解的大佬做法 p_q

注意爆long long,所以先对数取一下上限

二分确定下限,然后输出

#include<stdio.h>
#include<math.h>
#include<string.h>
#include<stack>
#include<set>
#include<queue>
#include<vector>
#include<iostream>
#include <limits.h>
#include<algorithm>
#define MAXN 1010100
#define LL unsigned long long
// #define ll __int64
#define INF 0x7fffffff
#define cs(s) freopen(s,"r",stdin)
#define mem(x) memset(x,0,sizeof(x))
#define PI acos(-1)
#define eps 1e-10
using namespace std;
int gcd(int a,int b){return b?gcd(b,a%b):a;}
int lcm(int a,int b){return a/gcd(a,b)*b;}
LL powmod(LL a,LL b){LL ans=1;while(b){if(b%2)ans=ans*a;a=a*a;b/=2;}return ans;}
//head
LL ll,rr,w,L,R,cnt;
LL mid,ans;
int main(){
    scanf("%llu%llu%llu",&ll,&rr,&w);
    if(w==1){
        puts("1");
        return 0;
    }
    int l=0,r=log(rr)/log(w);
    R=r;
    l=0,r=log(rr)/log(w);
    ans=-1;
    while(l<=r){
        mid=(l+r)/2;
        if(powmod(w,mid)>=ll)ans=mid,r=mid-1;
        else l=mid+1;
    }
    L=ans;
    for(int i=L;i<=R;i++){
        ans=powmod(w,i);
        if(ans>=ll&&ans<=rr)
        printf("%lld ",ans),cnt++;
    }
    if(!cnt)puts("-1");
    return 0;
}
全部评论

相关推荐

老树开花:可以开始投了,不用等到觉得完全准备好。一边投一边根据面试反馈改简历是最高效的方式。简历上项目描述建议突出你解决的具体问题,比如编辑器的性能优化、大文档渲染怎么处理的,而不只是列技术栈。中厂前端实习现在竞争确实激烈,建议同时关注一些有AI业务的团队,前端加AI应用是很有差异化的组合。Vue全家桶基础扎实的话可以往SSR或者跨端方向延伸,这些是面试加分项。加油,时间还来得及。
点赞 评论 收藏
分享
再懒也要睡懒觉:大学4年玩的挺爽的哈😅
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务