Problem Description
小明天生对数字比较敏感,3岁的时候就能背诵圆周率一百位。
现在,小明慢慢长大了,但依然很喜欢数字,最近,他迷上了质数和平方数,并且自己把质数的平方命名为“质方数”。
现在,他在研究这样一个问题:距离一个正整数N最接近的质方数是多少?
Input
输入数据第一行是一个正整数T(T<=20),表示有T组输入数据。
接下来T行,每行输入一个正整数N(1<=N<=10^8)。
接下来T行,每行输入一个正整数N(1<=N<=10^8)。
Output
对于每组数据,请输出距离N最接近的质方数,每组输出占一行。
Sample Input
2
1
10
1
10
Sample Output
4
9
9
水了一发杭电全国新生赛,我只想说当时题意理解错误。
玉民的代码:
#include <iostream>
#include <algorithm>
#include <iomanip>
#include <string>
#include <cstring>
#include <cmath>
using namespace std;
int cmp(int x)
{
if(x==) return ;
else
{
for(int i=;i<=sqrt(x);i++)
if(x%i==) return ;
}
return ;
}
int main()
{
int n,m,i,j,k,t;
cin>>t;
while(t--)
{
cin>>m;
k=sqrt(m);
if(m==||m==||m==)
cout<<""<<endl;
else
{ int k;
for(i=m;;i++)
{ k=sqrt(i);
if(k*k==i&&cmp(k)) break;
}
for(j=m;;j--)
{ k=sqrt(j);
if(k*k==j&&cmp(k)) break;
} if(i-m<m-j) cout<<i<<endl;
else cout<<j<<endl;
}
}
return ;
}