1055 - 一个数学问题
时间限制 : 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); } } } }