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/
  • 相关阅读:
    118/119. Pascal's Triangle/II
    160. Intersection of Two Linked Lists
    168. Excel Sheet Column Title
    167. Two Sum II
    172. Factorial Trailing Zeroes
    169. Majority Element
    189. Rotate Array
    202. Happy Number
    204. Count Primes
    MVC之Model元数据
  • 原文地址:https://www.cnblogs.com/lllxq/p/8665353.html
Copyright © 2011-2022 走看看