素因子分解 Prime factorization

算术基本定理,又称为正整数的唯一分解定理,即:每个大于1的自然数均可写为质数的积,而且这些素因子按大小排列之后,写法仅有一种方式。例如:,。

算术基本定理的内容由两部分构成:

  • 分解的存在性:
  • 分解的唯一性,即若不考虑排列的顺序,正整数分解为素数乘积的方式是唯一的。
  • 第一步:首先用埃氏筛选法构造n以内的素数表,然后再分解:
  • #include <iostream>
    #include <map>
    using namespace std;
    const int maxn=100000;
    int prime[maxn];
    bool is_prime[maxn+1];
    map<int,int> res;
    int primemake(int n)  	//n以内的素数筛选,返回素数个数 
    {
    	int cnt=0;
    	for(int i=0;i<=n;i++)is_prime[i]=1;
    	is_prime[0]=is_prime[1]=0;
    	for(int i=2;i<=n;i++){
    		if(is_prime[i]){
    			prime[cnt++]=i;
    			for(int j=2*i;j<=n;j+=i) is_prime[j]=0;
    		}
    	}
    	return cnt;
    } 
    void prime_factor(int n)
    {
    	res.clear();
    	int cnt=primemake(n);
    	for(int i=0;i<cnt;i++)
    	{			
    		while(n%prime[i]==0){
    				res[prime[i]]++; //map第一个元素为底数,第二个元素为幂次
    				n/=prime[i];
    			}	
    	}
    	return ;
    }
    int main()
    {
    	int n;
    	while(cin>>n)
    	{
    		prime_factor(n);
    		for(map<int,int>::iterator ite=res.begin();ite!=res.end();ite++)
    			cout<<ite->first<<" "<<ite->second<<endl;	
    	} 
    	return 0;
    	 
    }


你可能感兴趣的:(素因子分解)