1. 程式人生 > >ACM-1017 A Mathematical Curiosity

ACM-1017 A Mathematical Curiosity

A Mathematical Curiosity

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 49888    Accepted Submission(s): 16141


 

Problem Description

Given two integers n and m, count the number of pairs of integers (a,b) such that 0 < a < b < n and (a^2+b^2 +m)/(ab) is an integer.

This problem contains multiple test cases!

The first line of a multiple input is an integer N, then a blank line followed by N input blocks. Each input block is in the format indicated in the problem description. There is a blank line between input blocks.
The output format consists of N output blocks. There is a blank line between output blocks.

Input

You will be given a number of cases in the input. Each case is specified by a line containing the integers n and m. The end of input is indicated by a case in which n = m = 0. You may assume that 0 < n <= 100.

Output

For each case, print the case number as well as the number of pairs (a,b) satisfying the given property. Print the output for each case on one line in the format as shown below. 

Sample Input

1

 

10 1

20 3

30 4

0   0

Sample Output

Case 1: 2

Case 2: 4

Case 3: 5

簡單數學題,題目大意是給定兩個整數N,M,求滿足(a ^ 2 + b ^ 2 + m)/(ab)為整數的(a,b)的對數(0<a<b<n)。

題倒是不難,寫一個二重迴圈滿足公式計數就可以,輸出表達的有點不清楚,搞得的我心態有點崩,WA了好幾次。

輸出的大概意思是這樣,樣例分為t組,每組有無限多個樣例,以m=n=0為結束。每組之間用空行隔開(注意,每組之間,最後一組之後不加空行)

貼出N次WA之後AC的程式碼。可能有些人覺得我的程式碼寫的太開,其實看每個人風格吧,個人覺得這樣容易改錯,記憶體當然也不會佔用多少。

#include<bits/stdc++.h>
#include<iostream>
#include<cstdlib>
#include<cstdio>
using namespace std;

int main()
{
int t,m,n;
	cin>>t;
	for(int i=0;i<t;i++)
	{	
		int ca=1;    //樣例數從1加
		while(cin>>n>>m&&(n||m))
		{
			int count = 0 ;
			for(int k=1;k<n;k++)
			{
				for(int j=k+1;j<n;j++)
				{
					if((j*j+k*k+m)%(k*j)==0)
					{
						count++;
					}
				}
			}
			cout<<"Case "<<ca<<": "<<count<<endl;       //注意大寫!!
			ca++;
		}
		if(i<t-1)			cout<<endl; //組之間空行
	}
	return 0;
}