题目:https://pintia.cn/problem-sets/994805342720868352/problems/994805415005503488

  1. 这题是分解质因子的基本应用,需要注意一下
  2. 测试点3一直没过是因为没有特判n = 1的情况

代码

  1. #include<algorithm>
  2. #include<vector>
  3. #include<iostream>
  4. #include<cstdio>
  5. #include<cmath>
  6. using namespace std;
  7. struct Factor{
  8. int x, cnt;
  9. }fac[10];
  10. const int maxn = 100010;
  11. vector<int> prime;
  12. vector<bool> is_prime(maxn,true);
  13. void get_prime(int n){
  14. is_prime[1] = false;
  15. for(int i = 2; i < maxn; i++){
  16. if(is_prime[i] == true){
  17. prime.push_back(i);
  18. for(int j = 2 * i; j < maxn; j += i){
  19. is_prime[j] = false;
  20. }
  21. }
  22. }
  23. }
  24. int main(){
  25. int n, num = 0;
  26. scanf("%d",&n);
  27. if(n == 1) {
  28. printf("1=1");
  29. return 0;
  30. }
  31. printf("%d=",n);
  32. get_prime(n);
  33. int sqr = (int)sqrt(1.0 * n);
  34. int len = prime.size();
  35. for(int i = 0; i < len && prime[i] <= sqr; i++){
  36. if(n % prime[i] == 0){
  37. fac[num].x = prime[i];
  38. fac[num].cnt = 0;
  39. while(n % prime[i] == 0){
  40. fac[num].cnt++;
  41. n /= prime[i];
  42. }
  43. num++;
  44. }
  45. }
  46. if(n != 1){
  47. fac[num].x = n;
  48. fac[num++].cnt = 1;
  49. }
  50. for(int i = 0; i < num; i++){
  51. printf("%d",fac[i].x);
  52. if(fac[i].cnt!=1) printf("^%d",fac[i].cnt);
  53. if(i != num - 1) printf("*");
  54. }
  55. return 0;
  56. }