分解质因数
如果一个数字不是素数,那么它就可以被拆分。
对一个数x分解质因数,就是找到素数p1,p2…pn使得
必要的时候,我们需要确定e1,e2…en
思路:
建立一个素数数组。找出从1到x的所有素数。
建立一个结构体,分别是素数的数值和素数的出现次数。
对x开始进行分解(用从2开始的质数i进行整除,如果可以除下就令x=x/i;直到i大于x为止)。
代码:
#include <stdio.h>
//输入一个数字,输出这个数字的质因数(有哪些素数组成,素数的幂级数是多少。)
bool mark[100001]; // true表示是素数。 开到10^5
int prime[100001];
int primeSize=0;
//初始化所有的质数到一个数组中
void init(){
for(int i=0;i<100001;i++){
mark[i]=true;
}
for(int j=2;j<100001;j++){
// 这个数字不是素数了,什么也不干。
if(mark[j]==false){
;
}
//这个数字是素数。
else {
prime[primeSize++]=j;
if(j<1000){
for(int k=j*j;k<100001;k+=j){
mark[k]=false;
}
}
}
}
//printf("ok");
}
struct sushu{
int number;
int number_count=0;
};
int main(){
init();
sushu out[10000];
int j=0;
int m;
bool first_meet=true; // 判断是否是重复整除的。
scanf("%d",&m);
//进入循环,开始判断素数。
for(int i=0;prime[i]<=m;i++){
//能整除的话,就一直整除这个数直到不能整除为止。
if(m%prime[i]==0){
out[j].number=prime[i];
while(m%prime[i]==0){
out[j].number_count++;
m=m/prim