[數論]分解質因數
阿新 • • 發佈:2018-03-29
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; }
[數論]分解質因數