问题描述:
给定两个整数n和m,统计这样的整数对的个数(a,b),满足0 < a < b < n 并且 (a^2+b^2 +m)/(ab) 也是整数。
这个问题包括多组测试数据。
第一行是个整数N,然后是一个空行,接下来是N组输入数据块,每个数据块之间有一个空行隔开。每个数据块中有多个输入数据,包括两个整数,空格隔开。
输入:
给定你输入数据的块数,每个测试数据包括两个整数n和m,n=m=0表示输入结束,假定0 < n <= 100。
输出:
对于每组测试数据,要求输出当前组内测试数据的序号以及满足条件的整数对的个数,每组占一行。组与组之间用空行隔开。
输入样例:
1
10 1
20 3
30 4
0 0
输出样例:
Case 1: 2
Case 2: 4
Case 3: 5
解题分析:N指的是数据块,而在每个数据块中又有若干组数据,所以这道题在输入上需要注意一下,先是数据块个数小于等于N,然后是每个数据块中输入数据均为0时停止输入。
以第一组数据对为例,n=10,m=1,然后a从1开始取值一直到9,b从2开始取值一直到9,如果(a^2+b^2+m)/(a*b)也为整数,则输出case 1(注意这个1指的是第一组数据,也就是10 1这对数据在数据块中的顺序):2(a与b在各自取值中不断尝试后发现满足条件的数对个数)
代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main()
{
int N,n,m;
int a,b,i,count;
scanf("%d",&N);
scanf("\n");
while(N--){
i=1;
while(scanf("%d %d",&n,&m)!=EOF){
if(n==0&&m==0) break;
count=0;
for(a=1;a<n;a++){
for(b=a+1;b<n;b++){
if((a*a+b*b+m)%(a*b)==0) count++;
}
}
printf("Case %d: %d\n",i,count);
i++;
}
if(N>=1) printf("\n");//不同数据块间用空行隔开
}
return 0;
}