PAT 甲级 1059 Prime Factors(25 分)

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 
# include 
# include 
using namespace std;
const int MAXN = 1e5;
int plist[MAXN], pnum = 0;

struct zyz{
	int p, c;
}prime[10];

bool is_prime(int n){
	if(n == 1) return false;
	int sqr = sqrt(1.0 * n);
	for(int i = 2; i < sqr; i++){
		if(n % i == 0)
			return false;
		else return true;
	}
}

void Find_prime(){
	for(int i = 2; i < MAXN; i++){
		if(is_prime(i))
			plist[pnum++] = i;
	}
}

int main(){
//	freopen("C:\\1.txt", "r", stdin);
	Find_prime();
	int n, num = 0;
	scanf("%d", &n);
	if(n == 1){
		printf("1=1");
		return 0;
	}
	printf("%d=", n); 
	int sqr = sqrt(1.0 * n);
	for(int i = 0; i < pnum && plist[i] < sqr; i++){
		if(n % plist[i] == 0){
			prime[num].p = plist[i];
			prime[num].c = 0;
			while(n % plist[i] == 0){
				prime[num].c++;
				n /= plist[i];
			}
			num++;
		}
		if(n == 1) break;
	}
	if(n != 1){
		prime[num].p = n;
		prime[num++].c = 1;
	}
	
	for(int i = 0; i < num; i++){
		if(i > 0) printf("*");
		printf("%d", prime[i].p);
		if(prime[i].c > 1)
			printf("^%d", prime[i].c);
	}
	return 0;
} 

 

你可能感兴趣的:(PAT,甲级)