Project Euler NO21

d(n)定義爲n 的所有真因子(小於 n 且能整除 n 的整數)之和。
如果 d(a) = b 並且 d(b) = a, 且 a ≠ b, 那麼 a 和 b 就是一對相親數(amicable pair),並且 a 和 b 都叫做親和數(amicable number)。

例如220的真因子是 1, 2, 4, 5, 10, 11, 20, 22, 44, 55 和 110; 因此 d(220) = 284. 284的真因子是1, 2, 4, 71 和142; 所以d(284) = 220.

計算10000以下所有親和數之和。


public class Problem21
{
	public static void main(String[] args)
	{
		howmany();
	}
	
	static void howmany()
	{
		int sum = 0;
		//從2 ~ 10000
		for (int i = 2; i <= 10000; i++)
		{
			// d(a) = b 並且 d(b) = a, 且 a ≠ b
			if (he(he(i)) == i && he(i) != i)
			{
				sum += i;
			}
		}
		System.out.println(sum);
	}
	
	static int he(int n)
	{
		if (n == 1)
		{
			return 0;
		}
		int sum = 1;//除了1,所有的數都有真因子 1;
		for (int i = 2; i <= Math.sqrt(n); i++)
		{
			if ( n % i == 0)
			{
				sum = sum + i + n / i;
			}
		}
		
		return sum;
	}
}

answer :  31626
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章