【PAT】1059 Prime Factors 解题报告

1059 Prime Factors (25分)

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p​1​​​k​1​​​​×p​2​​​k​2​​​​×⋯×p​m​​​k​m​​​​.

Input Specification:

Each input file contains one test case which gives a positive integer N in the range of long int.

Output Specification:

Factor N in the format N = p​1​​^k​1​​*p​2​​^k​2​​**p​m​​^k​m​​, where p​i​​'s are prime factors of N in increasing order, and the exponent k​i​​ is the number of p​i​​ -- hence when there is only one p​i​​, k​i​​ is 1 and must NOT be printed out.

Sample Input:

97532468

Sample Output:

97532468=2^2*11*17*101*1291

题解

#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
using namespace std;
const int maxn = 100010;
int prime[maxn], pNum = 0;
bool is_prime(int n){//判断n是否为素数 
	if(n == 1){
		return false;
	}
	int sqr = (int)sqrt(1.0 * n);
	int i;
	for(i = 2; i <= sqr; i++){
		if(n % i == 0){
			return false;
		}
	}
	return true;
}
void Find_Prime(){//素数表 
	int i;
	for(i = 1; i < maxn; i++){
		if(is_prime(i) == true){
			prime[pNum++] = i;
		}
	}
}
struct factor{
	int x;
	int cnt;
}fac[10];
int main(){
	Find_Prime();
	int n;
	while(scanf("%d", &n) != EOF){
		int num = 0;
		int i;
		if(n == 1){
			printf("1=1");
		}
		else{
			printf("%d=", n);
			int sqr = (int)sqrt(1.0 * n);
			for(i = 0; i < pNum; i++){
				if(n % prime[i] == 0){//prime[i]是n的因子 
					fac[num].x = prime[i];
					fac[num].cnt = 0;
					while(n % prime[i] == 0){//计算prime[i]的个数 
						fac[num].cnt++;
						n = n / prime[i];
					}
					num++;
				}
				if(n == 1){
					break;
				} 
			}
			if(n != 1){//有一个大于根号n的质因子 
				fac[num].x = n;
				fac[num].cnt = 1;
			} 
		}
		for(i = 0; i < num; i++){
			if(i > 0){
				printf("*");
			}
			printf("%d", fac[i].x);
			if(fac[i].cnt > 1){
				printf("^%d", fac[i].cnt);
			}
		} 
	}
    return 0;
}
发布了160 篇原创文章 · 获赞 175 · 访问量 4万+

猜你喜欢

转载自blog.csdn.net/wyatt007/article/details/104858002