【蓝桥杯】BASIC-16 分解质因数

  • 2019 年 11 月 13 日
  • 筆記

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/weixin_42449444/article/details/102984695

题目描述:

求出区间[a,b]中所有整数的质因数分解。

【提示】先筛出所有素数,然后再分解。

输入描述:

输入两个整数a,b(2<=a<=b<=10000)。

输出描述:

每行输出一个数的分解,形如k=a1*a2*a3…(a1< =a2< =a3…,k也是从小到大的)。

输入样例:

3 10

输出样例:

3=3  4=2*2  5=5  6=2*3  7=7  8=2*2*2  9=3*3  10=2*5

解题思路:

开局一个TLE,水题直接运行超时把我劝退。后来发现我超时的原因是判断素数的那段代码导致的。我一开始写的isPrime函数判断素数的时候不够快。

AC代码:

#include <bits/stdc++.h>  using namespace std;  #define Up(i,a,b) for(int i = a; i <= b; i++)    //万恶的TLE 超时了  // bool isPrime(int n)  // {  //     if(n <= 1) return false;  //     Up(i,2,sqrt(n))  //     {  //         if(n%i == 0) return false;  //     }  //     return true;  // }    int isPrime(int n)  //很神奇,以后我不要用上面的方法来判断素数啦  {      if(n <= 1) return 0;      else if(n==2 || n==3)      {          return 1;      }      else      {          for(int i = 2; i*i < n; i++)          {              if(n%i == 0) return 0;          }          return 1;      }  }    int main()  {      ios::sync_with_stdio(false);      cin.tie(0),cout.tie(0);      int a,b;      cin >> a >> b;      Up(i,a,b)      {          int _ = i;          cout << _ << "=";          bool virgin = true;          while(_ != 1)          {              Up(j,2,_)              {                  if(isPrime(j) && _%j==0)                  {                      _ /= j;                      cout << (virgin?"":"*") << j;                      virgin = false;                      break;                  }              }          }          cout << endl;      }      return 0;  }