在C ++中找到给定长度的复合数字范围

假设我们有一个数字n。我们必须找到正整数的范围,其中范围内的所有数字都是合成的,范围的长度为n。如果有多个范围,则打印任何一个范围。合成数是一个数字,其中至少有一个除1以外的除数本身。

由于范围的长度为n,因此,如果第一个数字为a,则其他数字为a + 1,a + 2…,a + n – 1,所有这些都应该是合成的。如果我们看到x !,其中x是正整数,则x的因子为2、3、4,...,p –1。所以p!+我有一个因素我,所以p!+我必须是复合的。p!+ 2,p!+ 3,…p!+ p – 1都是复合的。因此范围将是[p!+ 2,p!+ p – 1]

示例

#include<iostream>
using namespace std;
int fact (int n) {
   if (n == 0)
      return 1;
   return n * fact(n-1);
}
void showRange(int n) {
   int a = fact(n + 2) + 2;
   int b = a + n - 1;
   cout << "[" << a << ", " << b << "]";
}
int main() {
   int n = 3 ;
   showRange(n);
}

输出结果

[122, 124]