如题,关于素因子分解问题错误代码,避免跳坑!!!!
CSDN中有其他正确的文章,搜索框随便搜一下,就可以搜出正解。
写了几个小时的思路,摸爬滚打,逐渐完善,但最后还是有问题,真是心有不甘啊,放这纪念一下!!
题目如下:
给定某个正整数 N,求其素因子分解结果,即给出其因式分解表达式 N=p1k1⋅p2k2⋯pmkm。
输入格式:
输入long int范围内的正整数 N。
输出格式:
按给定格式输出N的素因式分解表达式,即 N=p1^k1*p2^k2*…*pm^km
,其中pi
为素因子并要求由小到大输出,指数ki
为pi
的个数;当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;
}
真是服啦