#include<stdlib.h>
#include<string.h>
unsigned int m=2
unsigned int cnt=1
void Factor(int n, char *msg, char printYes)
int main()
{
char s[100]={0}
char flag='y'
printf("------求整数的因式分解------\n请输入正整数m(>1):")
scanf("%u", &m)
printf("打印详细分解情况吗?[y|n,回车打印]")
scanf("%*c%c",&flag)
if(m<1)
{
printf("error input!\n")
exit(-1)
}
if(flag!='n')
printf("%d = %d \n", m,m)
Factor(m, s,flag)
if(cnt==1)
printf("\n%d是素数\n",m)
printf("\n------")
printf("一共有%d种", cnt)
printf("------\n")
return 0
}
void Factor(int n, char *msg,char printYes)
{
char s2[100]={0}//保存当前分解的部分结果
if(n==1)
return
for(int i=2i<ni++)
{
if (n%i==0)
{
if(n==m)
sprintf(msg, "%d = ", m)
sprintf(s2,"%s %d * ",msg, i)//因式分解部分结果保存在字符串s2中
if(printYes!='n')
printf("%s %d\n",s2,n/i)//打印结果(包括最后一个因子)
Factor(n/i,s2,printYes)
cnt++
}
}
}
// 下面是用我在toj 10004上面通过的代码,稍加修改写成的。#include <stdio.h>
#include <math.h>
int Prime(int x)
{
int n, i
n = (int)sqrt(x)
for (i = 2i <= ni++)
if (x % i == 0) break
if (i >n)
return 1
else
return 0
}
int main()
{
// freopen("2.txt","w",stdout)
int x
int t
int i , n
int y
int first
int max
while (scanf("%d",&max) == 1)
{
for (y = 2y <= maxy++)
{
x = y
if (Prime(x))
{
printf("%d=%d\n",x,x)
}
else
{
printf("%d=",x)
first = 1
do
{
for (i = 2i <= xi++)
{
t = 0n = 0
while (x % i == 0)
{
t = 1
n++
x = x/i
}
if (t)
{
if (first) first = 0
else printf("*")
while (n>1)
{
printf("%d*",i)
n--
}
printf("%d",i)
}
}
} while(x != 1)
printf("\n")
}
}
}
return 0
}