Codeforces 923 A. Primal Sport
http://codeforces.com/contest/923/problem/A
题意:
初始有一个x0,可以选择任意一个<x0的质数p,之后得到x1为≥x0最小的p的倍数
然后再通过x1按照一样的算法得出一个x2
已知x2,问x0最小可能是多少
设f[x] 表示<x 的最大的x的质因数
那么x1 ∈ [x2-f[x2]+1,x2]
同理,可以得到x0
#include<cstdio> using namespace std; int f[1000001]; #define min(x,y) ( (x)<(y) ? (x) : (y) ) int main() { int n; scanf("%d",&n); for(int i=2;i<=n;++i) { if(!f[i]) for(int j=i<<1;j<=n;j+=i) f[j]=i; f[i]=i-f[i]+1; } int ans=1e6; for(int i=f[n];i<=n;++i) ans=min(ans,f[i]); printf("%d",ans); }