1. 程式人生 > >[數論]分解質因數

[數論]分解質因數

n-2 put -m 整數 str inpu hint cst element

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("\n"); 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("\n"); return 0; }






[數論]分解質因數