`

亲密数——数论问题系列

阅读更多
亲密数是成对出现的,展示了两个整数之间通过因子的密切联系。如果整数a的因子和等于b,而整数b的因子和等于a,因子包括1但不包括本身,且a不等于b,则称a、b为亲密数对。

例如:220和204便是一堆亲密数,因为其满足如下规则:
220的各个因子之和为:1+2+4+5+10+11+20+22+44+55+110=204;
204的各因子之和为:1+2+4+71+142=220.

代码如下:
import java.util.Scanner;
public class QinMiNumber {
	static void findFriendNumber(int para)
	{
		int divisorSum=0;
		int FNDivisorSum=0;
		String factor="1";
		String FNFactor="1";
		for(int i=1;i<para;i++)
		{
			if(para%i==0)
			{
				divisorSum+=i;
				if(i>=2)
				{
					factor=factor+"+"+i;
				}
			}
		}
		if((para!=divisorSum)&&(para<divisorSum))
		{
			for(int k=1;k<divisorSum;k++)
			{
				if(divisorSum%k==0)
				{
					FNDivisorSum+=k;
					if(k>=2)
					{
						FNFactor=FNFactor+"+"+k;
					}
				}
			}
			if(para==FNDivisorSum)
			{
				System.out.println(para+"与"+divisorSum+"是亲密数!实例如下:");
				System.out.println(FNFactor+"="+para);
				System.out.println(factor+"="+divisorSum);
				System.out.println();
			}
			/*else{
				System.out.println(para+"不存在亲密数!");
			}*/
		}
	}
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.print("请输入亲密数的最大值:");
		Scanner input = new Scanner(System.in);
		int Max= input.nextInt();
		System.out.println("程序将查找1~"+Max+"之间的亲密数!");
		for(int i=1;i<=Max;i++)
		{
			findFriendNumber(i);
		}
	}

}


代码运行结果如下:

请输入亲密数的最大值:5000
程序将查找1~5000之间的亲密数!
220与284是亲密数!实例如下:
1+2+4+71+142=220
1+2+4+5+10+11+20+22+44+55+110=284

1184与1210是亲密数!实例如下:
1+2+5+10+11+22+55+110+121+242+605=1184
1+2+4+8+16+32+37+74+148+296+592=1210

2620与2924是亲密数!实例如下:
1+2+4+17+34+43+68+86+172+731+1462=2620
1+2+4+5+10+20+131+262+524+655+1310=2924
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics