zoukankan      html  css  js  c++  java
  • [数论]分解质因数

    Description

    每一个大于等于2的自然数,均可写成一个或多个质数的乘积,例如:

    2=2
    
    20=2*2*5
    

    这种将一个整数分割成若干个质数之积的操作叫做分解质因数。现在,给你一个整数N,请你编写一个程序,对其分解质因数。

    Input Format

    输入为一行,正整数N,保证1<N<21474836471<N<2147483647。

    Output Format

    输出N的质因数分解形式,格式为 N=P1(E1)P2(E2)P3(E3).... 其中,P1、P2、P3、……为组成N的各个质因子,

    满足P1 < P2 < P3 < ...;E1、E2、E3、……分别为P1、P2、P3、……在N中的指数。

    例如:

    20=2*2*5
    

    应该输出成:

    20=2(2)5(1)
    

    Hint

    N的大于sqrt(N)的质因子至多有一个。(sqrt(n)指N的开方取整)

    Sample Input

    20
    

    Sample Output

    20=2(2)5(1)

    思路:分解质因数模板的应用。下面给出模板:(模拟短除法———从最小的质数2除起,一直除到结果为质数为止)
    #include<cstdio>
    
    int main(){
      int n;
      scanf("%d",&n);
      printf("%d=",n);
      for(int i=2;i*i<=n;i++){//n在变小,时间复杂度小于根号n
        while(n%i==0){
            n/=i;
            printf("%d",i);
            if(n!=1) printf("*");
        }
      }
      if(n!=1) printf("%d",n);
      printf("
    ");
      return 0;
    }

    AC代码:

    #include <iostream>
    #include<cstdio>
    using namespace std;
    
    int main()
    {
        int n;
        scanf("%d",&n);
        printf("%d=",n);
        for(int i=2;i*i<=n;i++){
            if(n%i==0){
                int tmp=0;
                while(n%i==0){
                    n/=i;
                    tmp++;
                }
                printf("%d(%d)",i,tmp);
            }
        }
        if(n!=1) printf("%d(1)",n);
        printf("
    ");
        return 0;
    }





    转载请注明出处:https://www.cnblogs.com/lllxq/
  • 相关阅读:
    Salesforce学习笔记(一)
    踏上Salesforce的学习之路(二)
    踏上Salesforce的学习之路(一)
    Salesforce注册开发者账号
    ubuntu下安装rtl8811cu/rtl8821cu网卡 Tplink WDN5200H网卡
    基于JRebel开发的MySQL Explain插件
    Logback配置解析
    基于springboot实现http响应异常信息国际化
    高并发场景下请求合并的实践
    后台开发常用mysql语句_v1.0
  • 原文地址:https://www.cnblogs.com/lllxq/p/8665353.html
Copyright © 2011-2022 走看看