考 虑 x 2 倒 退 回 x 1 考虑x_2倒退回x1 考虑x2倒退回x1
显 然 设 x 2 最 大 质 因 子 是 P , 那 么 x 1 的 最 小 值 是 x 2 − P + 1 显然设x_2最大质因子是P,那么x_1的最小值是x_2-P+1 显然设x2最大质因子是P,那么x1的最小值是x2−P+1
x 1 的 最 大 值 就 是 x 2 , 因 为 ( x 2 本 身 一 定 有 质 因 子 ) x_1的最大值就是x_2,因为(x_2本身一定有质因子) x1的最大值就是x2,因为(x2本身一定有质因子)
那 么 得 出 x 1 的 取 值 是 [ x 2 − P + 1 , x 2 ] 那么得出x_1的取值是[x_2-P+1,x_2] 那么得出x1的取值是[x2−P+1,x2]
那 么 对 于 所 有 的 x 1 去 求 x 0 的 最 小 值 , 也 就 是 x 0 − P + 1 那么对于所有的x_1去求x_0的最小值,也就是x_0-P+1 那么对于所有的x1去求x0的最小值,也就是x0−P+1
做的时候,只需要欧拉筛预处理每个数的最大质因子即可
#include <bits/stdc++.h>
using namespace std;
const int maxn=1e6+10;
int n,ans,a[maxn];
int main()
{
scanf("%d",&n);
for(int i=2;i<=n;i++)
{
if(!a[i])
for(int j=2*i;j<=n;j+=i) a[j]=i;
}
int ans=n;
for(int i=n-a[n]+1;i<=n;i++)
ans=min(ans,i-a[i]+1);
cout<<ans;
}