河南第三届ACM省赛(素数)

来源:互联网 发布:vs2017写c语言 编辑:程序博客网 时间:2024/04/30 20:57

题目地址:点击打开链接

思路:水题

AC代码:

#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>using namespace std;int prime[1000],nprime = 0;void doprime(){    int i,j;    bool isprime[1000];    memset(isprime,true,sizeof(isprime));    isprime[1] = false;    for(i=2; i<1000; i++)    {        if(isprime[i])        {            prime[nprime++] = i;            for(j=i*i; j<1000; j+=i)            {                isprime[j] = false;            }        }    }}int main(){    int t,n,i;    doprime();    scanf("%d",&t);    while(t--)    {        scanf("%d",&n);        int min1 = 100000,min2;        for(i=0; i<nprime; i++)        {            if(abs(prime[i] - n) <= min1)//保证相同时选大值            {                min1 = abs(prime[i] - n);                min2 = prime[i];            }            if(prime[i] >= n)//遇到第一个比它大就直接退出            {                break;            }        }        printf("%d\n",min2);    }    return 0;}


0 0