プロジェクトオイラー問12

http://odz.sakura.ne.jp/projecteuler/index.php?cmd=read&page=Problem%2012
Problem 12 「高度整除三角数」 †
三角数の数列は自然数の和で表わされ, 7番目の三角数は 1 + 2 + 3 + 4 + 5 + 6 + 7 = 28 である. 三角数の最初の10項は:

1, 3, 6, 10, 15, 21, 28, 36, 45, 55, ...
となる.
最初の7項について, その約数を列挙すると, 以下のとおり.





三角数はn*(n+1)/2。これはnの約数とn+1の約数でできています。
nの約数はn+1の約数でなく、n+1の約数もnの約数ではありませんので約数の個数は掛け算ができす。
ある数nの約数の個数はtableに入れます。


#include<stdio.h>

const int LIMIT=20000;
int main(){
 	int table[LIMIT]={0};
	int count=0;
	for(int i=1;i<LIMIT;i++){
		
 		for(int j=i;j<LIMIT;j+=i){
			table[j]++;
			count++;
		}
	}
 	for(int i=2;i<LIMIT;i++){
		int p1,p2;
		if(i%2==0){
			p1=i/2;
 			p2=i+1;
		}else{
			p1=i;
			p2=(i+1)/2;
		}
		count++;
 		if(table[p1]*table[p2]>=500){
			printf("%d bigO=%d ans=%d",i,count,(i*(i+1))/2);
			break;
		}
	}
}
最終更新:2014年11月16日 09:37