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;
    }

    保持热爱 不懈努力 不试试看怎么知道会失败呢(划掉) 世上无难事 只要肯放弃(划掉)
  • 相关阅读:
    设计模式JS中的单例模式应用(一)
    SSD5_ Exercise 4分析
    JavaEE学习笔记
    SSD5_Exercise5分析
    SSD5_Optional Exercise6分析
    ACM相关网站
    hdu 2066 一个人的旅行【Dijkstra 12级新生训练—图论E】
    新队员图论基础_【CSUST_12级训练】
    hdu 2112 Today【F map + Floyd 入门训练】
    turtle库笔记
  • 原文地址:https://www.cnblogs.com/ldudxy/p/10046010.html
Copyright © 2011-2022 走看看