/**
*
* @author tanx
* @create 2011-10-8 下午3:42:25
* @since 确定所有这样的正整数对(a,b),即,a<b<1000且(a平方+b平方+1)/(ab)是整数
* @param
* @return
*/
public static boolean confirmNums(int a, int b){
if(a<b&&b<1000){
int c = (a*a+b*b+1)/(a*b);
if((a*b*c)!=(a*a+b*b+1)){
return false;
}
}else{
return false;
}
return true;
}
下面是别人的帮助解答,感谢fp1203
引用
其实只要证明(a^2+b^2+1)/(a*b)=3就可以了:
令(a^2+b^2+1)/(a*b)=k
则有b^2-(ka)b+(a^2+1)=0 => delta=k^2 * a^2 - 4 * (a^2+1)
因为要整除,所以delta肯定为平方数,令delta=t^2
则k^2*a^2-t^2=4*a^2+4 => (ka+t)(ka-t)=4(a^2+1)
有下面几种可能的情况:
1)ka+t=4,ka-t=a^2+1 或者 ka+t=a^2+1,ka-t=4
则有a^2-(2k)a+5=0 => delta1=4k^2-4*5=4(k^2-5)
同样delta1为平方数,即k^2-5为平方数,令k^2-5=r^2
则有(k+r)(k-r)=1*5,即k+r=5,k-r=1,即k=3
第一种情况证毕
2) ka-t=2,ka+t=2(a^2+1) (ka-t不可能等于2(a^2+1),因为ka+t>ka-t)
则有a^2-ka+2=0 => delta2=k^2-8
delta2为平方数,令k^2-8=m^2,则(k+m)(k-m)=8=2*4
则(k+m)+(k-m)=2+4=6,即k=3
第二种情况证毕
3)假设(a^2+1)含因子s
则有 (ka+t)+(ka-t)=4s+(a^2+1)/s
即a^2-(2sk)a+(4s^2+1)=0 (式1) => delta3=4(s^2*k^2-4s^2-1)
delta3为平方数,令s^2k^2-4s^2-1=n^2
则(sk+n)(sk-n)=4s^2+1
3.1) (sk+n)+(sk-n)=4s^2+1+1 => k=(2s^2+1)/s=2s+1/s =>当且仅当s=1时,满足k为整数且k=3
3.2) 假设4s^2+1含因子i,则有 (sk+n)(sk-n)=y+(4s^2+1)/y
即y^2-(2sk)y+(4*s^2+1)=0 与(式1)完全一样,因此这个步骤可以一直进行下去,当4s^2+1已
不能再分解时,就只可能是3.1对应的步骤,故,第三种情况证毕
PS:第三种情况可能有点难理解,其实有点像数学归纳法
分享到:
相关推荐
对于给定的2 个正整数a <= b 计算a 和b之间约数个数最多的数。 可以保证a和b都不超过2000000. 数据输入: 输入数据有2个正整数a和b。 结果输出: 若找到的a 和b之间约数个数最多的数是x,将div(x)输出。 Sample ...
最多约数问题 正整数x 的约数是能整除x 的正整数。正整数x 的约数个数记为div(x)。...输入数据的第1 行有2 个正整数a和b。 Output 程序运行结束时,若找到的a 和b 之间约数个数最多的数是x,将div(x)输出。
求两个正整数a 和 b的最大公约数。要求使用c++ class编写程序。可以创建如下class
函数fun功能是:将a,b中的两个两位正整数合并形成一个新的整数放在c中。合并的方式是:将a中的十位和个位数依次放在变量c十位和千位上,b中的十位和个位数依次放在变量c个位和百位上。 例如,当a=45,b=12.调用该...
Description 将正整数n表示成一系列正整数之和:n=n1+n2+…+nk,其中n1≥n2...第2至n+1每行一个正整数。 Output 对应每组输入,输出正整数n的不同划分个数。 Sample Input 2 5 6 Sample Output 7 11
求满足1+2+3+…n<100的最大正整数n的MATLAB程序
给定两个均不超过9的正整数a和n,要求编写程序求a+aa+aaa++⋯+aa⋯a(n个a)之和。
C++,输入两个正整数a和n,求a+aa+aaa+…+aa…a(n个a)之和
L1-025 正整数A+B 解题思路: 1.因为想到会有乱码,而且会有空格,就想到用一个很长的字符数组去储存A,B 2.先用alen,blen测A,B的长度,用两个变量布尔变量标记A,B是否合格 3.用三个for循环,第一个测A的长度,第二...
A+B的c语言表示方法.很简单的一个例子仅供参考
由空格分隔的一对整数A和B,如: 5 12 请注意:该数据要求从当前目录下的文件input.in中读取。 输出: 输出到当前目录下的 output.out 文件,输出结果为输入数据A和B的和(请注意是否有换行)。
#include<bits/stdc++.h> using namespace std;... cout<<"1******输入集合A和B*******"<<endl; cout<<"2*******求集合A交B********"<<endl; cout<<"3*******求集合A并B********"<<endl; cout<<"4**
给定一个正整数a,以及另外的5个正整数,问题是:这5个整数中,小于a的整数的和是多少? 输入要求 输入一行,只包括6个小于100的正整数,其中第一个正整数就是a。 输出要求 输出一行,给出一个正整数,是5个数中...
给出一个正整数a,要求分解成若干个正整数的乘积,即a = a1 * a2 * a3 * ... * an,并且1 < a1 <= a2 <= a3 <= ... <= an,问这样的分解的种数有多少。注意到a = a也是一种分解。 Input 第1行是测试数据的组数n,...
现有一个大于1的整数x,将其作为除数分别除a,b,c,得到的余数相同。 请问满足上述条件的x的最小值是多少?数据保证x有解。 【输入】 一行,三个不大于1000000的正整数a,b,c,两个整数之间用一个空格隔开。 ...
C语言程序设计-将两个两位数的正整数a、b合并形成一个整数放在c 中;合并的方式是:将a数的十位和个位数依次放在c数的千位和十位上, b数的十位和个位数依次放在c数的个位和百位上; 例如:当a=45,b=12;调用该函数后...
输入三个正整数a, b, c. 若此三数构成三角形,则输出三角形面积
删数问题 Description 给定n 位正整数a,去掉其中...文件的第1 行是1 个正整数a。第2 行是正整数k。 Output 程序运行结束时,将计算出的最小数输出到文件output.txt中。 Sample Input 178543 4 Sample Output 13
C语言程序设计-将两个两位数的正整数a、b合并形成一个整数放在c中;合并的方式是:将a数的十位和个位数依次放在c数的百位和个位上, b数的十位和个位数依次放在c数的十位和千位上;例如:当a=45,b=12;调用该函数后,...
用Java写出在键盘输入,a,b两个整数,求和输出