问题描述:
A和n都是自然数,且A=an2+bn+c是完全平方数。例如:A=n2+15n+26,算得n=23。
这里A不大于一百万即1000000。
输入:
若干组a、b和c,都是正整数。每组一行,数之间用空格隔开。
输出:
若干个n值,如果有多个n满足条件则每个n输出一行。
样例输入:
1 15 26
1 1 25
样例输出
13
0
7
24
问题分析:
本题用枚举法来实现。从小到大枚举n,n是自然数所以从0开始枚举。
事先标记完全平方数备用,可以用数组来标记。数组类型用char则比较节省空间,用bool类型会更节省空间。
解题C语言程序如下:
/* M0004 完全平方数 */
#include <stdio.h>
#include <string.h>
#define N 1000000
char A[N + 1];
int main()
{
memset(A, 0, sizeof A);
for (int i = 1, ix; ;i++) {
if ((ix = i * i) > N) break;
else A[ix] = 1;
}
int a, b, c;
while (~scanf("%d%d%d", &a, &b, &c)) {
for (int n = 0, t; ; n++) {
if ((t = a * n * n + b * n + c) > N) break;
else if (A[t])
printf("%d\n", n);
}
}
return 0;
}