素因子分解----“崩溃瞬间”

如题,关于素因子分解问题错误代码,避免跳坑!!!! 

CSDN中有其他正确的文章,搜索框随便搜一下,就可以搜出正解。

写了几个小时的思路,摸爬滚打,逐渐完善,但最后还是有问题,真是心有不甘啊,放这纪念一下!!

题目如下:

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

输入格式:

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

输出格式:

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

输入样例:

1323

输出样例:

1323=3^3*7^2
#include<stdio.h>
int diagnosis(int s);
int main()
{
	long N, s, Nfake;
	int i, j, count = 0;
	int countf = 0, countd=0, counts;
	int sum = 1, mid = 1;
	scanf_s("%ld", &N);
	Nfake = N;
	if (N == 1||diagnosis(N)) printf("%ld=%ld", N, N);
	for (s = 2;s <= N;s++)
	{
		count = 0;counts = 0;
		if (diagnosis(s))
		{
			while (1)
			{
				if (Nfake % s == 0)
				{
					count++;Nfake = Nfake / s;counts = Nfake;
				}
				if (Nfake % s != 0)
				{
					countf++;
					/*printf("%d %d %d\n",count,counts,Nfake,countf);*/
					break;
				}
			}
			if ((countf == 1) && (counts == Nfake))
			{
				if (count == 1)
					printf("%ld=%d", N, s);
				else printf("%ld=%d^%d", N, s, count);
				mid = s ^ count;
				sum = sum * mid;
			}

			if ((countf > 1) && (countd != countf) && (counts == Nfake))
			{
				if (count == 1)
					printf("*%d", s);
				else printf("*%d^%d", s, count);
				mid = s ^ count;
				sum = sum * mid;
			}

			countd = countf;
			if (sum == N) break;
		}
	}
	/*printf("%ld=%d", N, sum);*/
	return 0;
}
int diagnosis(int s)
{
	int k;
	for (k = 2;k<= s-1;k++)
		if (s % k == 0) break;
	if (k >= s) return 1;
	if (k < s) return 0;
}

 真是服啦

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值