8004 一个数学好奇号

问题描述:

       给定两个整数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;
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值