杭电校赛(质方数)

来源:互联网 发布:软件问题跟踪表 编辑:程序博客网 时间:2024/05/01 16:40

质方数

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
Total Submission(s): 3611    Accepted Submission(s): 1212


Problem Description
  小明天生对数字比较敏感,3岁的时候就能背诵圆周率一百位。

  现在,小明慢慢长大了,但依然很喜欢数字,最近,他迷上了质数和平方数,并且自己把质数的平方命名为“质方数”。
  现在,他在研究这样一个问题:距离一个正整数N最接近的质方数是多少?
 

Input
输入数据第一行是一个正整数T(T<=20),表示有T组输入数据。
接下来T行,每行输入一个正整数N(1<=N<=10^8)。
 

Output
对于每组数据,请输出距离N最接近的质方数,每组输出占一行。
 

Sample Input
2110
 

Sample Output
49

思路:模拟 

AC代码:
#include <iostream>#include <cstdio>#include <cstdlib>#include <algorithm>#include <queue>#include <stack>#include <map>#include <cstring>#include <climits>#include <cmath>#include <cctype>typedef long long ll;using namespace std;const int maxn = 10010;int prime;bool isprime[maxn];int loc[maxn];int k;void doprime(){    k = 0;    int i,j;    memset(isprime,true,sizeof(isprime));    for(i=2; i<maxn; i++)    {        if(isprime[i])        {            loc[k++] = i*i;            for(j=i*i; j<maxn; j+=i)            {                isprime[j] = false;            }        }    }}int main(){    int i;    doprime();    int t,n;    scanf("%d",&t);    while(t--)    {        int x;        scanf("%d",&n);        int min1 = INT_MAX;        for(i=0; i<k; i++)        {            if(abs(loc[i] - n) < min1)            {                x = i;                min1 = abs(loc[i] - n);            }            if(loc[i] >= n)                break;        }        printf("%d\n",loc[x]);    }    return 0;}


0 0
原创粉丝点击