zoukankan      html  css  js  c++  java
  • Codeforces Round #520 (Div. 2)B(贪心,数学)

    #include<bits/stdc++.h>
    using namespace std;
    int mi[100007];
    int main(){
    int cnt=0;
    int flag=0;
    int ans=1;
    int n,k=0;
    scanf("%d",&n);
    for(int i=2;i*i<=n;i++){
      if(n%i==0){
        flag=1;
        break;
      }
    }
    if(flag==0)//如果不用操作直接输出即可
    printf("%d %d",n,k);
    else{
      for(int i=2;i*i<=n;i++){
        if(n%i==0){
          ans*=i;//有小到大寻找可分解的因数
          cnt++;
          while(n%i==0){
            n/=i;
            mi[cnt]++;//记录能被分解几次
          }
        }
      }
      if(n>1){//剩余大于根号n的仍未分解
        cnt++;
        mi[cnt]++;
        ans*=n;//记录在案,ans是由无法继续分解的数相乘组成的
      }
      int mx=0;
      for(int i=1;i<=cnt;i++)
        mx=max(mx,mi[i]);//找到能被操作次数最多的
      k=(int)ceil(log(mx*1.0)/log(2.0));//开方次数
      int x=pow(2,k);//实际操作的最大值
      for(int i=1;i<=cnt;i++)
        if(mi[i]!=x){//不理想的情况(不用乘直接开方)是需要乘一次的,贪心地乘一次直接把所有数组里的值由哪些数得来的乘到数组值变为x
          k++;//多出一次乘法操作
          break;
        }
        printf("%d %d",ans,k);
      }
      return 0;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    学习视屏
    Spring 和 MyBatis 环境整合
    struts2 多文件下载
    struts2的单文件下载
    很好的验证码
    Oracle 存储过程
    Oracle序列
    struts2 的多文件上传
    struts2的单文件上传
    NETBEAN 启动报错 CANNOT LOCATE JAVA INSTALLATION IN SPECIFIED JDKHOME的解决办法
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10046010.html
Copyright © 2011-2022 走看看