题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488
- 这题是分解质因子的基本应用,需要注意一下
- 测试点3一直没过是因为没有特判n = 1的情况
代码
#include<algorithm>#include<vector>#include<iostream>#include<cstdio>#include<cmath>using namespace std;struct Factor{int x, cnt;}fac[10];const int maxn = 100010;vector<int> prime;vector<bool> is_prime(maxn,true);void get_prime(int n){is_prime[1] = false;for(int i = 2; i < maxn; i++){if(is_prime[i] == true){prime.push_back(i);for(int j = 2 * i; j < maxn; j += i){is_prime[j] = false;}}}}int main(){int n, num = 0;scanf("%d",&n);if(n == 1) {printf("1=1");return 0;}printf("%d=",n);get_prime(n);int sqr = (int)sqrt(1.0 * n);int len = prime.size();for(int i = 0; i < len && prime[i] <= sqr; i++){if(n % prime[i] == 0){fac[num].x = prime[i];fac[num].cnt = 0;while(n % prime[i] == 0){fac[num].cnt++;n /= prime[i];}num++;}}if(n != 1){fac[num].x = n;fac[num++].cnt = 1;}for(int i = 0; i < num; i++){printf("%d",fac[i].x);if(fac[i].cnt!=1) printf("^%d",fac[i].cnt);if(i != num - 1) printf("*");}return 0;}
