Problem J: 质方数
Description
小z很喜欢研究各种各样的数字,最近他迷上了质数和平方数,他把一个质数的平方命名为”质方数”,现在他想知道,给出一个正整数,距离这个正整数最近的质方数是什么?(如果有2个距离相等的质方数,选择较小的一个)
Input
输入数据组数为T(T<=50),每组数据输入一个正整数n,其中1<=n<=100,000,000;
Output
对于每个测试样例,输出距离最近的质方数,每个样例占一行。
Sample Input
238
Sample Output
49
Problem J: 质方数
Description
小z很喜欢研究各种各样的数字,最近他迷上了质数和平方数,他把一个质数的平方命名为”质方数”,现在他想知道,给出一个正整数,距离这个正整数最近的质方数是什么?(如果有2个距离相等的质方数,选择较小的一个)
Input
输入数据组数为T(T<=50),每组数据输入一个正整数n,其中1<=n<=100,000,000;
Output
对于每个测试样例,输出距离最近的质方数,每个样例占一行。
Sample Input
238
Sample Output
49
#include<stdio.h>
#include <math.h>
#include <algorithm>
using namespace std;
#define N 10005
long long int T,n,a[N];
int sushu(int n)
{
for(int i=2; i<=sqrt(n); i++)
if(n%i==0)
return 0;
return 1;
}
int main()
{
int t=0,p;
for(int i=2; i<=10005; i++)
if(sushu(i)==1)
a[t++]=i*i;
scanf("%d",&T);
while(T--)
{
scanf("%d",&n);
if(n==1)
printf("4\n");
else
{
for(int i=0; i<t; i++)
if(a[i]>=n)
{
p=i;
break;
}
if( (n-a[p-1])<=(a[p]-n))
printf("%d\n",a[p-1]);
else
printf("%d\n",a[p]);
}
}
return 0;
}