这道题目有个小细节,卡了我一下,因此记录一下。题目很简单,
说白了这个题目考察的就是你会不会判断一个数是不是完全平方数。
还好高中VB学过一点,因此判断这方面倒没有什么问题。主要是我忘记在判断的时候转换成整数了。
Problem G: 深入浅出学算法008-求佩尔方程的解
Time Limit: 1 Sec Memory Limit: 64 MB
Submit: 6363 Solved: 2364
Description
求关于x y的二次不定方程的解 x2-ny2=1
Input
多组输入数据,先输入组数T 然后输入正整数n(n<=100)
Output
对于每组数据输出一行,求y<=10000的最小正整数解 ,输出y的值,如果在此范围内没有解则输出No
Sample Input
1
73
Sample Output
No
代码如下
#include<bits/stdc++.h>
using namespace std;
int main()
{
int t;
while(cin>>t)
{
while(t--)
{
long long n,y=1;
cin>>n;
int judge=0;
while(y<=100000)
{
if((int)sqrt(1+n*y*y)*(int)sqrt(1+n*y*y)==1+n*y*y)
{
judge=1;
cout<<y;
break;
}
y++;
}
if(judge==0)
cout<<"No\n";
else
cout<<endl;
}
}
}
sqrt前面一定要加上(int)进行强制转换,不然就会出错,因为我们要让开出来的必须是整数。