1055 - 一个数学问题

通过次数

0

提交次数

0

时间限制 : 1 秒 内存限制 : 32 MB

给你两个整数n和m,请你计算有多少个整数对(a,b)满足以下条件:
当0<a<b<n时,(a^2+b^2+m)/(ab)是一个整数。

题目输入

输入包含多组测试数据。每组输入为两个整数n和m(0<n<=100),当n=m=0时,输入结束。

题目输出

对于每组输入,输出样例标号和满足要求的整数对的个数。

输入/输出样例

输入格式

10 1
20 3
30 4
0 0

输出格式

Case 1: 2
Case 2: 4
Case 3: 5

C语言解答

#include<stdio.h>

int main()
{
	int n,m,c=0,i,j,s;
	while(scanf("%d%d",&n,&m),n||m)
	{
		for(s=0,i=1;i<n;i++)
			for(j=i+1;j<n;j++)
				if((i*i+j*j+m)%(i*j)==0)
					s++;
		printf("Case %d: %d\n",++c,s);
	}
	return 0;
}

C++解答

#include<stdio.h>

int main()
{
	int n,m,c=0,i,j,s;
	while(scanf("%d%d",&n,&m),n||m)
	{
		for(s=0,i=1;i<n;i++)
			for(j=i+1;j<n;j++)
				if((i*i+j*j+m)%(i*j)==0)
					s++;
		printf("Case %d: %d\n",++c,s);
	}
	return 0;
}

Java解答

import java.util.*;
public class Main{
    public static void main(String[] args){
        Scanner input = new Scanner(System.in);
        int count = 0;
        while(input.hasNextInt()){
            int n = input.nextInt();
            int m = input.nextInt();
            if(n == 0 && m == 0)
                break;
            else{
                int a,b,count1 = 0;
                for(b = 1;b < n;b++){
                    for(a = 1;a < b;a++){
                        if((a * a + b * b + m) % (a * b) == 0)
                            count1++;
                    }
                }
                count++;
                System.out.println("Case " + count + ": " + count1);
            }
        }
    }
}