——————————————————————
有话说:啊,写的时候不小心,把数组设置错了,还找了好半天的错误呜。然后,来谈一下思路:来个函数,来判断是否为素数,然后题目给的数字可不可以被这个素数整除。
其中用了数组两个,第一个是用来存所有的因子,然后会有重复的。于是需要第二个数组,来整理。
总之,我相信还是有更简便的方法的,但是啊太忙了最近~~(其实是我这个人咸鱼)~~ 所以懒得继续优化了,不过小伙伴有什么好点子请大声说(大声哦大声
顺便来求个点赞!❤
——————————————————————
给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 (略)。
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即
N=p1k1*p2k2*…*pm^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki为1即因子pi只有一个时不输出ki。
输入样例:
1323
输出样例:
1323=3^3* 7^2
我的代码
#include<stdio.h>
#include<math.h>
int is_prime(long int n){
int i;
if(n==2)return 1;
for(i=2;i<=sqrt(n);i++){
if(n%i==0)return 0;
}
return 1;
};
int main(){
long num,num0;
int i,j=0,k=0,count=1;
int a[10000]={0},b[10000][2]={0};
scanf("%ld",&num);
num0=num;//保存原数字
if(is_prime(num)){//如果是素数就直接结束啦
printf("%lld=%ld",num,num);
return 0;
}
for(i=2;num!=1;i++){//找到所有的素因子
if(is_prime(i)){
if(num%i==0){
a[j]=i;
num=num/i;
j++;
i--;
}
}
}
for(i=0;i<j;i++){//对素因子来进行一个整理
if(a[i]==a[i+1])count++;
else if(a[i]!=a[i+1]){//但要记得处理数组溢出的问题不过只要数组空间没用满,大抵不需要担心这个问题
b[k][0]=a[i];
b[k][1]=count;
k++;
count=1;
}
}
printf("%ld=%d^%d",num0,b[0][0],b[0][1]);//打印出来
for(i=1;i<k;i++){
if(b[i][1]!=1)printf("*%d^%d",b[i][0],b[i][1]);
else printf("*%d",b[i][0]);
}
return 0;
}