https://www.nowcoder.com/practice/20426b85f7fc4ba8b0844cc04807fbd9?tpId=40&tqId=21338&tPage=1&rp=1&ru=/ta/kaoyan&qru=/ta/kaoyan/question-ranking
求正整数N(N>1)的质因数的个数。 相同的质因数需要重复计算。如120=2*2*2*3*5,共有5个质因数。
#include <iostream>
#include <cmath>
using namespace std;
int main(){
//若是到方根N仍大于1,则必还有且只还有1个质因数
long M=100;
while(cin>>M)
{
long count=0;
for(long j=2;j<=sqrt(M);j++)
{
while(M%j==0)
{
M=M/j;
count++;
}
if(M<=1)break;
}
if(M>1)count++;
cout<<count<<endl;
}
return 0;
}
用模板
bool prime[maxn];
void isprime()
{
memset(prime,1,sizeof(prime));
for(int i=2;i<maxn;i++)
{
for(int j=i+i;j<maxn;j+=i)
prime[j]=0;
}
}
#include <iostream>
using namespace std;
const int MAXN = 40000;//筛4w的素数是远远够的
bool used[MAXN];
int prim[MAXN];//存放素数
int SIZE = 0;//素数的个数
void is_prim()//埃氏素筛法
{
for(int i = 2; i * i < MAXN; ++i)
{
if(!used[i])
for(int j = 2 * i; j < MAXN; j += i)
used[j] = true;
}
for(int i = 2; i < MAXN; ++i)
if(!used[i]) prim[SIZE++] = i;
}
int main()
{
is_prim();
int n;
while(cin >> n)
{
int ans=0;
for(int i = 0; i < SIZE && n > 1; ++i)
{
while(n > 1 && n % prim[i] == 0)//当n大于1并且n能够除尽prim[i]
{
n /= prim[i];
//cout << prim[i] << " ";
ans++;
}
}
// if(n > 1) cout << n;//此时说明n是个素数,并且是大于4w的素数
// cout << endl;
if(n>1)ans++;
cout<<ans<<endl;
}
return 0;
}