zoukankan      html  css  js  c++  java
  • codevs 2669 简单的试炼

    2、codevs   2669 简单的试炼

    题目描述 Description

    已知一个数S,求X和Y,使得2^X+3^Y=S.

    输入描述 Input Description

    (多组数据)

    每行一个整数S,当S=0时输入结束.

    输出描述 Output Description

    X和Y,以2^X+3^Y=S的形式输出,若有多组解,输出X最小的那组.

    样例输入 Sample Input

    13

    33

    0

    样例输出 Sample Output

    2^2+3^2=13

    2^5+3^0=33

    数据范围及提示 Data Size & Hint

    对于30%的数据  S≤50,000,000 , 数据组数≤5000

    对于50%的数据  S≤3,000,000,000 , 数据组数≤20000

    对于80%的数据  S≤3,000,000,000,000 , 数据组数≤50000

    对于100%的数据 S≤200,000,000,000,000, 数据组数≤80000

    #include<cstdio>
    #include<cmath>
    long long s;
    int mi3=0;
    bool jc(long long x)//判断在此2的i次幂下能否使3的mi3有整数 
    {
        mi3++;
        if (x%3&&x!=1)//不是3的幂 
          {
              mi3=0;//清空以便再次计算 
            return 0;
          } 
        if (x==1) return 1;//符合方程式 
        else 
          (jc(x/3));             
    }
    long long ksm(int k,long long x)//
    {    
       for (int i=1;i<=k;i++)
         x*=2;
       return x;//
    }
    int main()
    {
        scanf("%lld",&s);
        while (s)
        {
              int j=ceil(sqrt(s));//如果只用2的幂组成s,2的指数绝对不会超过j 
             //下面的循环不会到j,所以不用担心s-k会小于零 
            for (int i=0;i<=j;i++)
            {
                long long k=ksm(i,1);
                   if (jc(s-k)) //因为题目只要输出最小的x,所以只要有i符合条件,输出后直接跳出即可 
                 {
                     printf("2^%d+3^%d=%lld
    ",i,mi3-1,s);
                     mi3=0;
                     break;
                 }
               }
            scanf("%lld",&s);
        }
        return 0;
        
    }
  • 相关阅读:
    Android 下拉刷新上啦加载SmartRefreshLayout + RecyclerView
    Maven 本地打war包
    数据库性能优化一
    SessionStateMode之Redis共享session
    SessionStateMode之SQL Server共享session
    iframe跨域
    Jenkins发布MVC应用程序
    Docker入门之一Docker在Window下安装
    Window下SVN服务器搭建以及客户端使用
    Window下Jenkins的安装
  • 原文地址:https://www.cnblogs.com/xiaoningmeng/p/5567199.html
Copyright © 2011-2022 走看看