PAT 1059. Prime Factors (25)

来源:互联网 发布:徐氏邵子神数批命软件 编辑:程序博客网 时间:2024/05/15 03:30

Given any positive integer N, you are supposed to find all of its prime factors, and write them in the format N = p1^k1 * p2^k2 *…*pm^km.

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 = p1^k1 * p2^k2 *…*pm^km, where pi's are prime factors of N in increasing order, and the exponent ki is the number of pi -- hence when there is only one pi, ki is 1 and must NOT be printed out.

Sample Input:
97532468
Sample Output:

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

/*  * 这题有问题 1既不是质数也不是合数 却有一组测试数据 1=1. 1又不是素数因子 无奈。。 * 午睡操场传来蝉的声音 多少年后也还是很好听~~*/#include "iostream"#include "vector"#include "cstring"#include "string"#include "stack"#include "algorithm"using namespace std;bool isPrime(long n) {if (n == 2)return 1;if (n % 2 == 0)return 0;bool flag = 1;for (long i = 3; i <= sqrt(n); i+=2) {if (n%i == 0) {flag = 0;break;}}return flag;}void Print(long& cnt, bool &flag,long& i) {if (cnt > 1 && !flag) {cout << i << "^" << cnt;flag = 1;}else if (cnt == 1 && !flag) {cout << i;flag = 1;}else if (cnt > 1 && flag) {cout << "*" << i << "^" << cnt;}else if (cnt == 1 && flag) {cout << "*" << i;}}int main() {long a;cin >> a;long cnt =0;bool flag = 0;if (a == 1) {cout << "1=1";return 0;}cout << a << "=";for (long i = 2; i <= a;) {if (isPrime(i)) { /* 如果i是素数 */if (a%i == 0) {a /= i;cnt++;if (a < i) {Print(cnt, flag, i);break;}}else {Print(cnt, flag, i);i++;cnt = 0;}}else {i++;}}cout << endl;return 0;}


0 0
原创粉丝点击