欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

进阶实验2-3.4-素因子分解-编程题

程序员文章站 2022-03-04 22:37:58
...

进阶实验2-3.4-素因子分解-编程题

解题代码

#include<stdio.h>
#include<stdlib.h>
#include<math.h>
typedef enum{false,true} bool;
void PrintFactorizationOfPrime(int K);
int GetNextFactorOfPrime(int K, int last_Factor);
int GetExpon(int* K, int Factor);
int GetNextPrime(int last_Prime);
bool IsPrime(K);
int main()
{
	int K;//1-the max of long int 2^31-1
	scanf("%d", &K);
	if (K == 1) printf("1=1");
	else PrintFactorizationOfPrime(K);
	return 0;
}
void PrintFactorizationOfPrime(int K) {
	printf("%d=", K);
	int flag=1;
	int temp_Factor = 1;
	int temp_Expon;
	while (K != 1) {
		if (flag)flag = 0;
		else printf("*");
		temp_Factor = GetNextFactorOfPrime(K, temp_Factor);
		temp_Expon = GetExpon(&K, temp_Factor);
		if (temp_Expon == 1) printf("%d", temp_Factor);
		else printf("%d^%d", temp_Factor, temp_Expon);
	}
}
int GetNextFactorOfPrime(int K, int last_Factor) {
	while (true) if (!(K % (last_Factor = GetNextPrime(last_Factor)))) return last_Factor;
}
int GetExpon(int* K, int Factor) {
	int temp_Expon = 0;
	while (true) {
		if (!(*K%Factor)) {
			temp_Expon++;
			*K /= Factor;
		}
		else return temp_Expon;
	}
}
int GetNextPrime(int last_Prime) {
	int temp_Prime;
	while (true) {
		if (IsPrime(++last_Prime)) return last_Prime;
	}
}
bool IsPrime(K) {
	int i;
	for (i = 2; i <= sqrt((double)K); i++) {
		if (!IsPrime(i)) continue;
		if (!K%i) return false;
	}
	return true;
}

测试结果

进阶实验2-3.4-素因子分解-编程题

问题整理

1.感觉写了一个不是每个人都能很顺利看懂的程序,这次用的函数比较多,思路比较清晰就是了。。
2.一个式子不要写的太复杂,比如if()内,这次的!遇到了运算优先级的bug。
3.比如printf中,本来放在printf中的调用函数放到了外边就把运行超时的bug给de了,虽然不是很清楚逻辑,别这么做暂时ok。