质因子分解:首先满足分解的因子为质数(1不为质数)任何一个自然数都可以分解为质数的乘积例如:15=3*5 20=2*2*5 所以15的质因子为3和5 ,20的质因子为2和5
用公式来说就是 其中p1 p2等都是质因子,x的因子的个数
因子分解:分解的因子可以不为质数,例如:20=1*20 20=2*10 20=4*5 所以因子(这里求的是不包括自身的因子):1,2,4,5,10原理就是:枚举[1,n½]找出区间内能被n整除的数,找到一个就可以找到俩个因子。
质因子分解还可以先对素数进行筛选,再找质因子比较简单 可以参考这篇博客:/qq_44797733/article/details/104702311
code:
#include<iostream>#include<cstring>#include<cstdio>#include<vector>#include<map>using namespace std;const int N=100;//因子和质因子分解100以内的数int num=0;map<int ,int> mp;//记录每个质因子的次数 int a[N]; void cal1(int x ){for(int i=2;i<=x/i;i++){//不i*i<=n的原因是防止爆int if(x%i==0) a[num++]=i;while(x%i==0){mp[i]++;x/=i;}}if(x>1) a[num++]=x,mp[x]++;//可能最后一个没有算上,特殊判断一下 }void cal2(int x){a[num++]=1;for(int i=2;i<=x/i;i++){if(x%i==0){//一个数可以产生俩个因子,只要俩个因子不相同 a[num++]=i;if(x/i!=i) a[num++]=x/i;}}}int main(){int n;cin>>n;int k;//如果是1质因子分解如果是0因子分解 cin>>k;if(k){cal1(n);for(int i=0;i<num;i++){cout<<a[i]<<" "<<mp[a[i]]<<endl;}}else{cal2(n);for(int i=0;i<num;i++){cout<<a[i]<<" ";}}return 0;}
输入:20 1(质因子分解)
输出:2 2
5 1
输入:20 0(因子分解)
输出:1 2 10 4 5
如果觉得《因子和质因子的分解》对你有帮助,请点赞、收藏,并留下你的观点哦!