雷割数のJava実装について

1384 ワード

雷劈数:カプリガというインドの数学者がいます.彼はある旅行の中で、激しい嵐に出会って、稲妻が鳴った後、道端の看板を見て、雷に半分に割れて、半分に30と書いて、もう半分に25と書いていました.この時、カプリガの脳の中で突然1つの絶妙な数学の関係を発見しました:30+25=55 55^2=3025、2つの半分に割った数を合わせて、更に平方、ちょうど元の数字です.最初の発見者の名前によれば、この怪数は「カプリガ数」または「雷割数」と命名された.
package com.gzitc.plnum;

public class Demon {
	/**
	 * isDemo(long num)    num      
	 * @param num
	 * @return
	 */
	public boolean isDemon(long num) {
		
		//num1、num2      
		long num1,num2,t_num;
		
		String ts = String.valueOf(num);
		int length = ts.length();
		
		//  
		if(ts.startsWith("-")) {
			return false;
		}
		
		//      
		if(ts.length() < 2) {
			return false;
		}
		
		//   
		if(length % 2 != 0) {
			return false;
		}
		
		num1 = Long.parseLong(ts.substring(0,length/2));
		num2 = Long.parseLong(ts.substring(length/2,length));
				
		t_num = num1 + num2;
		
		if(t_num * t_num == num) {
			return true;
		} else {
			return false;
		}
		
	}
	
	public static void main(String args[]) {
		Demon d = new Demon();
		for(long i = 10; i < 999999999; i++) {
			if(d.isDemon(i)) {
				System.out.print(i+"  ");
			}
		}
	}
}