2 条题解

  • 2
    @ 2022-10-15 21:21:21

    1:根据贪心,本题不是找到至少有4个约数的整数,而是找到恰好有4个约数的整数(任意两个因数相差大于等于d)。

    2:对于一些素数p和q(这里p和q只能为质数,否则答案就不止4个约数了),整数有4个约数,如果它的形式是p×q或p3p^3。在第一种情况下,它有因子1,p, q, p×q。在第二种情况下,它有因子1, pp, p2p^2, p3p^3,很明显p×q<p3p^3,,所以我们这里采用第一种情况

    3:若p为a最小的质因数,要使得任意两个因数只差至少为d,则p≥d+1。

    则解法为:

    四个因数,第一个为1,第四个为a,则中间两个就为第一个比1大于等于d的质数和第一个比第二个因数大于等于d的质数,将它们相乘即可得到 a

    • 0
      @ 2023-8-19 15:30:12

             \ \ \ \ \ \ \ 楼上的证明是不严谨的,但结果是正确的。我谨在这里从数论的角度给出一个严格证明。

             \ \ \ \ \ \ \ 本题要求的即是:

             \ \ \ \ \ \ \ 满足至少有四个因子,且任意两个因子之间的差大于等于dd的最小自然数。

             \ \ \ \ \ \ \ 令素数集合为P\mathcal{P},取

      $$p_1 = {\rm min}\{p_i:p_i\ge1+d且p_i\in\mathcal{P}\},\\ p_2 = {\rm min}\{p_i:p_i\ge p_1+d且p_i\in\mathcal{P}\}. $$

      再令n=p1p2n=p_1p_2,则nn即为所求。


             \ \ \ \ \ \ \ 先证明nn仅有1,p1,p2,n1,p_1,p_2,n四个因子。假设nn有不同于上述四个因子的其他因子aa,则

      ap1p2p1p2=ka.a|p_1p_2\Rightarrow p_1p_2=ka.

             \ \ \ \ \ \ \ 由素数的定义知:

      gcd(a,p1)=1,gcd(a,p2)=1.{\rm gcd}(a,p_1)=1,\\ {\rm gcd}(a,p_2)=1.

             \ \ \ \ \ \ \ 再由Bezout定理,存在整数x1,y1;x2,y2x_1,y_1;x_2,y_2使得:

      x1a+y1p1=1,x2a+y2p2=1.x_1a+y_1p_1=1,\\ x_2a+y_2p_2=1.

      两式相乘有

      x1x2a2+(x1y2p2+x2y1p1+y1y2k)a=1.x_1x_2a^2+(x_1y_2p_2+x_2y_1p_1+y_1y_2k)a=1.

             \ \ \ \ \ \ \ 显然aa整除左式,故有a1a|1,这不可能。

             \ \ \ \ \ \ \ nn仅有1,p1,p2,n1,p_1,p_2,n四个因子。


             \ \ \ \ \ \ \ 下证明nn的最小性。设存在满足条件且小于nn的自然数mm,其因子按照从小到大排列为:

      1<m1<<mk<m.1<m_1<\cdots<m_k<m.

             \ \ \ \ \ \ \ 显然第二小的因子m1Pm_1\in\mathcal{P},若不然,一定存在m1m_1的因子bb同时也是mm的因子使得1<b<m11<b<m_1与上方排列矛盾!又由条件得m11+dm_1\ge1+d,由p1p_1的定义得m1=p1m_1=p_1

             \ \ \ \ \ \ \ 按照条件,mkm1+d=p1+dm_k\ge m_1+d=p_1+d,由于

      m1mk=m<n=p1p2,m_1m_k=m<n=p_1p_2,

      p2p_2定义,mkm_k[p1+d,p2)[p_1+d,p_2)内的合数,由算术基本定理,mkm_k有素数唯一分解:

      mk=pm1α1pmjαj.m_k=p_{m_1}^{\alpha_1}\cdots p_{m_j}^{\alpha_j}.

      j>1j>1。故mkm_k一定有异于p1p_1的素因子pl<p2p_l<p_2,显然plp_l也是mm的因子。

             \ \ \ \ \ \ \ pl>p1p_l>p_1,由p2p_2定义必有

      plp1<d,p_l-p_1<d,

      与条件矛盾!

             \ \ \ \ \ \ \ pl<p1p_l<p_1,但这样一来由p1p_1定义又必有

      pl1<d,p_l-1<d,

      与条件矛盾!

             \ \ \ \ \ \ \ 故这样的mm不存在,nn是最小的满足条件的自然数。


             \ \ \ \ \ \ \ 最后我们证明n=p1p2n=p_1p_2满足条件,由p1,p2p_1,p_2的定义自然有:

      $$p_1-1\ge d,\\ p_2-p_1\ge d,\\ n-p_2=(p_1-1)p_2\ge dp_2\ge d. $$

             \ \ \ \ \ \ \ 综上我们完成了证明。


             \ \ \ \ \ \ \ 贴一下代码,判断素数用的是埃氏筛。

      #include <cstdio>
      
      const int MAXN = 50000;
      
      bool isPrime[MAXN];
      
      int fillIsPrime(){
          for(int i = 2; i <= MAXN; i++){
              isPrime[i] = true;
          }
          for(int i = 2; i <= MAXN; i++){
              if(isPrime[i]){
                  for(int j = 2 * i; j <= MAXN; j += i){
                      isPrime[j] = false;
                  }
              }
          }
          return 0;
      }
      
      int findDistMinPrime(int x){
          if(isPrime[x]){
              return x;
          }
          for(int j = 1; j <= MAXN; j++){
              if(isPrime[x + j]){
                  return x + j;
              }
          }
          return 0;
      }
      
      int main(){
          int t, d, d1, d2;
          fillIsPrime();
          scanf("%d", &t);
          for(int i = 1; i <= t; i++){
              scanf("%d", &d);
              d1 = findDistMinPrime(1 + d);
              d2 = findDistMinPrime(d1 + d);
              printf("%d\n", d1 * d2);
          }
      }
      
      • 1

      信息

      ID
      810
      时间
      1000ms
      内存
      256MiB
      难度
      8
      标签
      递交数
      334
      已通过
      48
      上传者