题目:给你一个数n,求一个素数x,满足p*x ≤ n < (p+1)*x,且n - p*x 最大。
分析:数论。打表计算素数,然后枚举所有小于n的输出,找到最大值即可。
说明:打表计算,查询输出,提高效率;输入可能小于100。
#include <algorithm>
#include <iostream>
#include <cstdlib>
#include <cstring>
#include <cstdio>
#include <cmath>
using namespace std;
int prime[10001];
int visit[10001];
int maxim[10001];
int main()
{
memset(visit, 0, sizeof(visit));
int count = 0;
for (int i = 2 ; i < 10001 ; ++ i)
if (!visit[i]) {
prime[count ++] = i;
for (int j = i ; j < 10001 ; j += i)
visit[j] = 1;
}
for (int i = 2 ; i < 10001 ; ++ i) {
maxim[i] = prime[0];
for (int j = 1 ; j < count ; ++ j) {
if (prime[j] >= i) break;
if (i%maxim[i] < i%prime[j])
maxim[i] = prime[j];
}
}
int m,n,Max;
while (~scanf("%d",&m))
while (m --){
scanf("%d",&n);
printf("%d\n",maxim[n]);
}
return 0;
}