三角数の数列は自然数の和で表わされ、7番目の三角数は1+2+3+4+5+6+7 = 28 である。 三角数の最初の10項は 1,3,6,10,15,21,28,36,45,55, ... となる。 最初の7項について、その約数を列挙すると、以下のとおり。 1: 1 3: 1,3 6: 1,2,3,6 10: 1,2,5,10 15: 1,3,5,15 21: 1,3,7,21 28: 1,2,4,7,14,28 これから、7番目の三角数である28は、6個以上の約数をもつ最初の三角数であることが分る。 では、501個以上の約数をもつ最初の三角数はいくらか。
#include <stdio.h>
#include <limits.h>
void main()
{
//const int TargetCount = 6;
const int TargetCount = 501;
int wkSankakusuu = 0;
for (int I = 1; I < INT_MAX; I++) {
wkSankakusuu += I;
int YakusuuCnt = 1;
int copiedSankakusuu = wkSankakusuu;
for (int J = 2; J <= copiedSankakusuu; J++) {
if (copiedSankakusuu % J == 0) {
int WillProdVal = 1;
while (copiedSankakusuu % J == 0) {
copiedSankakusuu /= J;
WillProdVal++;
}
YakusuuCnt *= WillProdVal;
}
}
printf("%dの約数は%d個\n",wkSankakusuu,YakusuuCnt);
if (YakusuuCnt >= TargetCount) return;
}
}
省略 76502265の約数は64個 76514635の約数は16個 76527006の約数は32個 76539378の約数は16個 76551751の約数は8個 76564125の約数は96個 76576500の約数は576個
三角数を素因数分解して、積の法則を適用して、約数の数を求めてます。