2-07. 素因子分解(20)

给定某个正整数N,求其素因子分解结果,即给出其因式分解表达式 N = p1^k1 * p2^k2 *…*pm ^km

输入格式说明:

输入long int范围内的正整数N。

输出格式说明:

按给定格式输出N的素因式分解表达式,即 N = p1^k1 * p2^k2 *…*pm ^km,其中pi为素因子并要求由小到大输出,指数ki为pi的个数;当ki==1即因子pi只有一个时不输出ki

样例输入与输出:

序号 输入 输出
1
1024
1024=2^10
2
1323
1323=3^3*7^2
3
97532468
97532468=2^2*11*17*101*1291
4
1
1=1
5
3
3=3



#include <stdio.h>
int isPrime(long n);
int main(int argc, char *argv[])
{
	
	int N,i,j,M;
	scanf("%d",&N);
	M=N;
	int data[100][2];这里投机取巧,不应该这么干的 
	if(isPrime(N)){
		printf("%d=%d\n",N,N);
	}else{
		
	j=0;
	for(i=0;i<100;i++){
		data[i][0]=0;
		data[i][1]=0;
	}
	while(isPrime(N)==0){
		for(i=2;i<=N/2;i++){
		if(N%i==0&&isPrime(i)){
			N=N/i;
			if(j==0&&data[0][0]==0){
				data[0][0]=i;
				data[0][1]++;
			}else if(data[0][0]!=0&&i==data[j][0]){
				data[j][1]++;
			}else if(i!=data[j][0]){
				j++;
				data[j][0]=i;
				data[j][1]++;
			}
		///	printf("-->%d %d\n",i,N);
			if(isPrime(N)){
				//printf("----->>>%d\n",N);
				if(data[j][0]!=N){
					j++;
					data[j][0]=N;
					data[j][1]++;
				}else{
					data[j][1]++;
				}
			}
			break;
		}
	    }
	}
	printf("%d=",M);
	for(i=0;i<=j;i++){
		
		if(i==0&&data[0][1]>1){
			printf("%d^%d",data[i][0],data[i][1]);
		}
		if(i==0&&data[0][1]==1){
			printf("%d",data[i][0]);
		}
		else if(i!=0&&data[i][1]>1){
			printf("*%d^%d",data[i][0],data[i][1]);
		}else if(i!=0&&data[i][1]==1){
			printf("*%d",data[i][0]);
		}
		//printf("+++++=%d---->>>%d\n",data[i][0],data[i][1]);
	}
	}
	return 0;
}

int isPrime(long n){
	int i,flag=1;
	for(i=2;i<=n/2;i++){
		if(n%i==0){
			flag=0;
			break;
		//	n=n/i;
			//printf("-->%d",i);
		}
	}
	return flag;
}


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值