PAT甲级1059 Prime Factors :[C++题解]分解质因子
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1059 Prime Factors :[C++题解]分解质因子
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
暴力求質因數
下面i就是質因子,s是質因子i的階數。
暴力的時間復雜度O(n),會超時
void divide(int n){for(int i=2;i<=n;i++){if(n%i==0){ //i是質因子,因為2,3等都把各自的倍數篩完了int s=0;//統計質因子的階數while(n%i==0){s++;n/=i;}cout<<i<<" "<<s<<endl;}} }優化
給出一個重要性質:正整數n的因子中,最多包含1個大于n\sqrt{n}n?的質因子。(可以用反證法來證明)
這里試除法的優化就是枚舉到n\sqrt{n}n?,然后剩下的1個大于n\sqrt{n}n?的質因子單獨處理,這樣試除法分解質因數的時間復雜度O(n\sqrt{n}n?)
ac代碼
#include<bits/stdc++.h> using namespace std;int n; int main(){cin >> n;cout<<n<<"=";if(n==1) cout<<1<<endl;else{bool is_first=true; //輸不輸出*//篩質因子,枚舉到≤ 根號nfor(int i = 2; i<= n / i; i++){//i是質因子,因為2,3等都把各自的倍數篩完了if(n% i == 0) {int k =0; //統計次數while(n % i ==0) n/=i ,k++;if(!is_first) cout<<"*";else is_first = false;cout << i;if(k>1) cout<<"^"<<k;}}//大于根號n的那個唯一的因子if(n >1){if(!is_first) cout<<"*";cout<< n;}}}題目鏈接
PAT甲級1059 Prime Factors
總結
以上是生活随笔為你收集整理的PAT甲级1059 Prime Factors :[C++题解]分解质因子的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Linux入门连载三】Linux常用的
- 下一篇: 算法刷题-数论-试除法求约数、约数个数、