PTA-素因子分解

——————————————————————
有话说:啊,写的时候不小心,把数组设置错了,还找了好半天的错误呜。然后,来谈一下思路:来个函数,来判断是否为素数,然后题目给的数字可不可以被这个素数整除。
其中用了数组两个,第一个是用来存所有的因子,然后会有重复的。于是需要第二个数组,来整理。
总之,我相信还是有更简便的方法的,但是啊太忙了最近~~(其实是我这个人咸鱼)~~ 所以懒得继续优化了,不过小伙伴有什么好点子请大声说(大声哦大声
顺便来求个点赞!❤
——————————————————————
给定某个正整数 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;
} 
  • 18
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值