质因数的个数 (分解质因数)
生活随笔
收集整理的這篇文章主要介紹了
质因数的个数 (分解质因数)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
鏈接:https://www.nowcoder.com/questionTerminal/20426b85f7fc4ba8b0844cc04807fbd9?f=discussion
來源:牛客網(wǎng)
- 熱度指數(shù):20444 時(shí)間限制:1秒 空間限制:65536K
輸入描述:
可能有多組測試數(shù)據(jù),每組測試數(shù)據(jù)的輸入是一個(gè)正整數(shù)N,(1<N<10^9)。輸出描述:
對于每組數(shù)據(jù),輸出N的質(zhì)因數(shù)的個(gè)數(shù)。 示例1輸入
120輸出
5思路
1)題目需要多組測試用例,我的第一個(gè)想法是沒能每個(gè)測試用例都去判斷質(zhì)數(shù),所以可以使用打表法,把100000以內(nèi)的質(zhì)數(shù)標(biāo)記出來
2)因?yàn)閏++中的數(shù)組不能太大(同時(shí)也是考慮到題目有內(nèi)存要求),標(biāo)記的質(zhì)數(shù)表不能全部包含所有可能的輸入數(shù)據(jù)的質(zhì)因數(shù),這里就有一個(gè)小技巧:如果輸入的數(shù)據(jù)n最后剩余不為1,則表示還存在一個(gè)大于質(zhì)數(shù)表內(nèi)的質(zhì)數(shù)
1 #include<iostream> 2 #include<string> 3 #include<cmath> 4 #include<algorithm> 5 6 using namespace std; 7 8 bool mark[10000]; 9 int prime[10000]; 10 int primeSize = 0; 11 12 void init() 13 { 14 mark[1] = false; 15 for(int i = 2; i < 10000; ++i) 16 mark[i] = true; 17 for(int i = 2; i < 10000; ++i) 18 { 19 if(mark[i] == true) 20 { 21 prime[primeSize++] = i; 22 for(int j = i*i; j < 10000; j += i) 23 mark[j] = false; 24 } 25 } 26 } 27 28 int main() 29 { 30 init(); 31 int num; 32 while(cin >> num) 33 { 34 int ans = 0; 35 for(int i = 0; i < primeSize; ++i) 36 { 37 if(num == 1) 38 break; 39 if(num % prime[i] == 0) 40 { 41 num /= prime[i]; 42 ans++; 43 i--; 44 } 45 } 46 if(num != 1) // 若測試完2到10000內(nèi)所有素因數(shù), num仍未被分解至1, 則剩余的因數(shù)一定是一個(gè)大于10000的素因數(shù) 47 ans++; 48 cout << ans << endl; 49 } 50 51 return 0; 52 }?
思路升級
其實(shí)不需要再循環(huán)里判斷i是為為質(zhì)數(shù),如果i是合數(shù),則一定不會(huì)被整除:那前面的質(zhì)數(shù)一定已經(jīng)合數(shù)中包含的質(zhì)數(shù)被整除過了
1 #include <iostream> 2 #include <math.h> 3 using namespace std; 4 int main() 5 { 6 int n; 7 while(cin>>n) 8 { 9 int i,count=0; 10 for(i=2; i<=sqrt(n); i++) 11 { 12 while(n%i==0) 13 { 14 count++; 15 n/=i; 16 } 17 } 18 if(n>1) 19 count++; 20 cout<<count<<endl; 21 } 22 return 0; 23 }?
轉(zhuǎn)載于:https://www.cnblogs.com/FengZeng666/p/11521420.html
總結(jié)
以上是生活随笔為你收集整理的质因数的个数 (分解质因数)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 约数的个数
- 下一篇: defer 被调用时机