分解质因数 and 素数筛法(打表) 1e9

1、每个数都可以写成几个或一个质数的几次方相乘的形式。

2、质数的倍数是非质数。

3、1e9    1后面9个零的意思

 

#include <cstdio>
#include <iostream>
#include<string>
#include<cstring>
#include<cmath>
#include<stdlib.h>
#include<algorithm>
#include<vector> 
#include<queue> 
#include<stack>  
using namespace std;
const int maxn =sqrt(1e9)+1;//注意是开了平方的
vector<int>v;
bool isp[maxn];
void in()
{
    for(int i=0;i<maxn;i++)
    {
        isp[i]=1;
    }
    isp[0]=0;
    isp[1]=0;
    for(int i=2;i<maxn;i++)
    {
        if(!isp[i])
         continue;
        v.push_back(i);
        for(int j=i*2;j<maxn;j+=i)//注意!从i的2倍数开始
        {
            isp[j]=0;
        }
    }
    return;
}
int main()
{
    in();
    int ans;
    int n;
    while(cin>>n)
    {
        ans=0;
        for(int i=0;i<v.size()&&v[i]<n;i++)
        {
            int f=v[i];
            while(n%f==0)
            {
                n/=f;
                ans++;
            }
        
        }
            if(n>1)//n至多只存在一个大于sqrt(x)的素因数。
            ans++;
        cout<<ans<<endl;
    }
  
  return 0; 
}

 

posted @ 2020-08-02 20:16  Tomorrow1126  阅读(755)  评论(0编辑  收藏  举报