素因子分解 Prime factorization

来源:互联网 发布:淘宝企业开店怎么注册 编辑:程序博客网 时间:2024/05/19 12:17

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

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

  • 分解的存在性:
  • 分解的唯一性,即若不考虑排列的顺序,正整数分解为素数乘积的方式是唯一的。
  • 第一步:首先用埃氏筛选法构造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; }


原创粉丝点击