试题 基础练习 分解质因数

深藏阁楼爱情的钟 2024-04-01 15:14 175阅读 0赞

试题 基础练习 分解质因数

资源限制
内存限制:512.0MB C/C++时间限制:1.0s Java时间限制:3.0s Python时间限制:5.0s
问题描述
  求出区间[a,b]中所有整数的质因数分解。
输入格式
  输入两个整数a,b。
输出格式
  每行输出一个数的分解,形如k=a1a2a3…(a1<=a2<=a3…,k也是从小到大的)(具体可看样例)
样例输入
3 10
样例输出
3=3
4=22
5=5
6=2
3
7=7
8=222
9=33
10=2
5
提示
  先筛出所有素数,然后再分解。
数据规模和约定
  2<=a<=b<=10000
运行结果

  1. #include <iostream>
  2. #include <vector>
  3. using namespace std;
  4. // 判断是否是质数
  5. bool IsPrime(int n)
  6. {
  7. int i;
  8. for (i = 2; i <= n/2; ++i)
  9. {
  10. if (n%i == 0)
  11. {
  12. return false;
  13. }
  14. }
  15. if (i > n/2)
  16. {
  17. return true;
  18. }
  19. else
  20. {
  21. return false;
  22. }
  23. }
  24. int main()
  25. {
  26. vector<int> v; // 存储2-b的所有质数
  27. int a,b;
  28. cin >> a;
  29. cin >> b;
  30. for (int i = 2; i<=b; ++i) // 存储质数过程
  31. {
  32. if (IsPrime(i))
  33. {
  34. v.push_back(i);
  35. }
  36. }
  37. for ( int i = a; i <= b; ++i) // 从a开始处理直到b
  38. {
  39. if (IsPrime(i)) // 是质数的话 直接输出
  40. {
  41. cout << i << "=" << i;
  42. }
  43. else // 不是质数分别处理
  44. {
  45. cout << i << "=";
  46. int temp = i;// 暂存i
  47. int index = 0; //存储质数的数组下标 索引
  48. while (temp != 1) // 当前数字没有被除尽时继续
  49. {
  50. if (temp%v[index] == 0) // 从第一个质数开始除
  51. {
  52. cout << v[index];
  53. temp /= v[index];
  54. index = 0; // 还原 即 继续从第一个质数2开始尝试
  55. if (temp != 1) // 控制 * 的输出
  56. cout << "*";
  57. }
  58. else // 不能整除的话尝试下一个质数
  59. {
  60. index++;
  61. }
  62. }
  63. }
  64. cout << endl;
  65. }
  66. return 0;
  67. }

发表评论

表情:
评论列表 (有 0 条评论,175人围观)

还没有评论,来说两句吧...

相关阅读