2 条题解
-
2
1:根据贪心,本题不是找到至少有4个约数的整数,而是找到恰好有4个约数的整数(任意两个因数相差大于等于d)。
2:对于一些素数p和q(这里p和q只能为质数,否则答案就不止4个约数了),整数有4个约数,如果它的形式是p×q或。在第一种情况下,它有因子1,p, q, p×q。在第二种情况下,它有因子1, , , ,很明显p×q<,,所以我们这里采用第一种情况
3:若p为a最小的质因数,要使得任意两个因数只差至少为d,则p≥d+1。
则解法为:
四个因数,第一个为1,第四个为a,则中间两个就为第一个比1大于等于d的质数和第一个比第二个因数大于等于d的质数,将它们相乘即可得到 a
-
0
楼上的证明是不严谨的,但结果是正确的。我谨在这里从数论的角度给出一个严格证明。
本题要求的即是:
满足至少有四个因子,且任意两个因子之间的差大于等于的最小自然数。
令素数集合为,取
$$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}\}. $$再令,则即为所求。
先证明仅有四个因子。假设有不同于上述四个因子的其他因子,则
由素数的定义知:
再由Bezout定理,存在整数使得:
两式相乘有
显然整除左式,故有,这不可能。
则仅有四个因子。
下证明的最小性。设存在满足条件且小于的自然数,其因子按照从小到大排列为:
显然第二小的因子,若不然,一定存在的因子同时也是的因子使得与上方排列矛盾!又由条件得,由的定义得。
按照条件,,由于
由定义,是内的合数,由算术基本定理,有素数唯一分解:
且。故一定有异于的素因子,显然也是的因子。
若,由定义必有
与条件矛盾!
故,但这样一来由定义又必有
与条件矛盾!
故这样的不存在,是最小的满足条件的自然数。
最后我们证明满足条件,由的定义自然有:
$$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
- 上传者