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