PAT《数据结构学习与实验指导》实验项目集 2-07. 素因子分解(20) C语言

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

时间限制
400 ms
内存限制
65536 kB
代码长度限制
8000 B
判题程序
Standard

给定某个正整数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
#include
#include

int main()
{
	long N;
	long i=2;//质因子要从2开始 
	int flag=0;
	scanf("%ld",&N);
	printf("%d=",N);
	if(N==1)
	{
		printf("1");//N等于1的时候直接输出1 
	}else
	{
		while(i<=N)//i不大于N就进行因子分解 
		{
			long p=0,k=0;//每次循环开始初始化P和k,方便后面进行输出判断 
			while(N%i==0)
			{
				N/=i;
				p=i;
				k++;
			}
			if(p!=0)
			{
				if(flag==1)//用flag判断是否要输出* 
				{
					printf("*");
				}
				printf("%d",p);
				flag=1;
			}
			if(k>1)//k为0或1都不用输出 
			{
				printf("^%d",k); 
			}
			i++;
		}
	}	
	
	
	return 0;
}

你可能感兴趣的:(PAT,《数据结构学习与实验指导》,实验项目集)