自然数 (natural number) Nの約数 (divisor) になる素数 (prime number) である素因数 (prime factor) を求め、それを積の形で表す素因数分解 (prime factorization) をします。その結果から導かれる数論的関数 (arithmetic function) の値や自然数Nが属する類 (class) を表示します。
[ 戻る ]
種類 | 値 |
---|---|
素因数分解 | |
無平方分解 | |
二平方和分解 |
関数 | 値 |
---|---|
素因数の個数 | |
素因数の総数 | |
素因数の和 | |
素因数の総和 | |
根基 | |
約数の個数 | |
約数の総和 | |
約数の総積 | |
Eulerのφ関数 | |
Möbius関数 | |
桁数 | |
数字和 | |
数字根 | |
数字積 | |
逆順数 |
類 | 判定 |
---|---|
素数 | |
調和数 | |
完全数 | |
乗法的完全数 | |
三角数 | |
矩形数 | |
平方数 | |
立方数 | |
Fibonacci数 | |
Lucas数 | |
Pell数 | |
Jacobsthal数 | |
Mersenne数 | |
Fermat数 | |
Cullen数 | |
中心二項係数 | |
Catalan数 | |
Motzkin数 | |
Montmort数 | |
怠け仕出し屋数 | |
ケーキ数 | |
多冪数 | |
無平方数 | |
Hamming数 | |
humble数 | |
Euler素数 | |
階乗数 | |
素数階乗数 | |
Smith数 | |
harshad数 | |
Zuckerman数 | |
タウ数 | |
算術数 | |
narcissistic数 | |
回文数 |
種類 | 時間[ms] |
---|---|
素因数分解 | |
二平方和分解 | |
数論的関数値 | |
類判定 |
[ 戻る ]
[ 戻る ]
[ 戻る ]
このページで扱うことができる素因数分解と二平方和分解の上限は以下の通りです。
種類 | Nの上限 | 結果 |
---|---|---|
素因数分解 | 9007199254740991 | 6361×69431×20394401 |
二平方和分解 | 9007199254740941 | 330157302+889784292 |
素因数分解から求められる各数論的関数の最大値は以下の通りです。素因数の個数中のpn#は1番目からn番目までの素数piの総乗である素数階乗 (primorial) を意味しています。
数論的関数 | 最大値 | 最大値を取るN |
---|---|---|
素因数の個数 | 13 | 304250263527210 (=p13#) 608500527054420 (=p13#×p1) 912750790581630 (=p13#×p2) 1521251317636050 (=p13#×p3) 2129751844690470 (=p13#×p4) 3346752898799310 (=p13#×p5) 3955253425853730 (=p13#×p6) 5172254479962570 (=p13#×p7) 5780755007016990 (=p13#×p8) 6541380665835015 (=p14#/p1) 6997756061125830 (=p13#×p9) 7149881192889435 (=p13#/p1×p15) 8062631983471065 (=p13#/p1×p16) 8823257642289090 (=p13#×p10) 8975382774052695 (=p13#/p1×p17) |
素因数の総数 | 52 | 4503599627370496 (=252) 6755399441055744 (=251×3) |
素因数の和 素因数の総和 |
9007199254740881 | 9007199254740881 |
根基 | 9007199254740991 | 9007199254740991 |
約数の個数 σ0(N) | 41472 | 8086598962041600 |
約数の総和 σ1(N) | 5.27299663036608×1016 | 8608315024108800 |
Eulerのφ関数 | 9007199254740880 | 9007199254740881 |
数字和 | 143 | 8999999999999999 |
数字積 | 1647129056757192 | 8999999999999999 |
逆順数 | 9999999999999998 | 8999999999999999 |
各々の自然数の類において、取り得る最大の自然数Nは以下の通りです。
類 | 取り得るNの最大値 | 備考 |
---|---|---|
素数 | 9007199254740881 | |
ピタゴラス素数 | 9007199254740881 | 90124842+944773752 |
ガウス素数 | 9007199254740847 | |
半素数 | 9007199254740979 | 149×60451001709671 |
楔数 | 9007199254740991 | 6361×69431×20394401 |
調和数 | 8882379701457408 | H̅=540(1124番目) |
完全数 | 137438691328 | 218×M19(7/51番目) |
1倍完全数 | 1 | (1/1番目) |
3倍完全数 | 51001180160 | (6/6番目) |
4倍完全数 | 6088728021160320 | (14/36番目) |
5倍完全数 | 796928461056000 | (7/65番目) |
概完全数 | 4503599627370496 | 252 |
乗法的完全数 | 9007199254740979 | 8.112963841460645×1031 |
三角数 | 9007199187632128 | 1+⋯+134217727 |
矩形数 | 9007199231156490 | 94906265×94906266 |
平方数 | 9007199136250225 | 949062652 |
立方数 | 9007091372906047 | 2080633 |
フィボナッチ数 | 8944394323791464 | F78 |
リュカ数 | 7639424778862807 | L76 |
ペル数 | 4217293152016490 | P42 |
ヤコブスタール数 | 6004799503160661 | J54 |
メルセンヌ数 | 9007199254740991 | M53=253−1 |
フェルマー数 | 4294967297 | Fe5=232+1 |
カレン数 | 6614661952700417 | C47=47×247+1 |
ウッダル数 | 6614661952700415 | W47=47×247−1 |
中心二項係数 | 7648690600760440 | 56C28 |
カタラン数 | 3814986502092304 | c30 |
モツキン数 | 7939655757745265 | Mz38 |
モンモール数 | 2355301661033953 | D18 |
怠け仕出し屋数 | 9007199187632129 | n=134217727 |
ケーキ数 | 9007194154972154 | n=378077 |
多冪数・累乗数 | 9007199136250225 | 949062652×13 |
アキレス数 | 9007198924021947 | 182647192×33 |
無平方数 | 9007199254740991 | μ(N)=−1 |
カーマイケル数 | 9007064218955089 | 7×47×53×4049×5869×21737 |
L-C数 | 3614740529402519 | 11×17×19×23×29×41×59×71×83×107 |
ハミング数 | 9000000000000000 | 215×32×515(7715番目) |
ハンブル数 | 9007135728228540 | 22×313×5×710(42037番目) |
オイラー素数 | 9007199231156531 | E94906266(合成数) |
階乗数 | 6402373705728000 | 18! |
素数階乗数 | 304250263527210 | p13#=41# |
ユークリッド数 | 304250263527211 | p13#+1=41#+1 |
クンマー数 | 304250263527209 | p13#−1=41#−1 |
スミス数 | 9007199229917009 | 数字和=74 |
ハーシャッド数 | 9007199254740960 | 数字和=72 |
ズッカーマン数 | 8999821431816192 | 数字積=967458816 |
タウ数 | 9007199254740972 | 約数の個数=12 |
算術数 | 9007199254740991 | 約数の平均=1126093181162796 |
ナルシシスト数 | 4338281769391371 | (43/88番目) |
回文数 | 9007199229917009 | (190071992番目) |
逆除数 | 2199999999999978 | (106番目) |
各類に属する素数で取り得る最大値を示します。ユークリッド素数とクンマー素数をまとめて素数階乗素数 (primorial prime) とも言います。
類 | 取り得るNの最大値 | 備考 |
---|---|---|
フィボナッチ素数 | 2971215073 | F47(11/51番目) |
リュカ素数 | 688846502588399 | L71(18/64番目) |
ペル素数 | 1746860020068409 | P41(7/31番目) |
ヤコブスタール素数 | 2932031007403 | J43(11/23番目) |
メルセンヌ素数 | 2147483647 | M31=231−1(8/51番目) |
フェルマー素数 | 65537 | Fe4=216+1(5/5番目) |
カレン素数 | 3 | C1=1×21+1(1/16番目) |
ウッダル素数 | 32212254719 | W30=30×230−1(4/34番目) |
カタラン素数 | 5 | c3(2/2番目) |
モツキン素数 | 953467954114363 | Mz36(4/4番目) |
モンモール素数 | 2 | D3(1/1番目) |
怠け仕出し屋素数 | 9007198113890341 | n=134217719 |
オイラー素数 | 9007199041344001 | E94906265 |
階乗素数 | 39916801 87178291199 |
11!+1(5/23番目) 14!−1(6/27番目) |
ユークリッド素数 | 200560490131 | p11#+1=31#+1(6/22番目) |
クンマー素数 | 304250263527209 | p13#−1=41#−1(5/20番目) |
ハーシャッド素数 | 7 | h7(4/4番目) |
ズッカーマン素数 | 11 | Z10(5/5番目) |
ナルシシスト素数 | 28116440335967 | (5/7番目) |
回文素数 | 999999787999999 | (119999978番目の回文数) |
[ 戻る ]
まずは計算終了値として自然数Nの平方根を求めます。Nを2で割り切れたときは、Nを2で割った商をNに代入し、更に2で割ります。2で割り切れなくなったら、割った回数を次数として素因数リストに保存します。それから計算終了値をそのときのNの平方根√Nに更新し、3以上の自然数についても同じ処理を行います。これを計算終了値に達するまで繰り返していきます。
var prime_factor_0 = function(n) {
/* 素因数分解(除数制限なし) */
var prime = {}; // 素因数リスト
var e = 0; // 指数部
for (var divisor = 2; divisor * divisor <= n; divisor++) {
while (n % divisor == 0) {
n /= divisor;
e++;
}
if (e !== 0) {
prime[divisor] = e; // keyをdivisorとする連想配列にeを保存
e = 0;
}
}
if (n > 1) prime[n] = 1; // 残った素数を追加
return prime;
};
2以外の素数は奇数であることが自明なため、除数を2と3以上の奇数に限定することで計算速度がprime_factor_0()
関数の約2倍になります。
var prime_factor_1 = function(n) {
/* 素因数分解(2の倍数を除外) */
var prime = {}; // 素因数リスト
var e = 0; // 指数部
for (var i = 0, divisor = 2; divisor * divisor <= n; i++, divisor = i * 2 + 1) {
while (n % divisor == 0) {
n /= divisor;
e++;
}
if (e !== 0) {
prime[divisor] = e; // keyをdivisorとする連想配列にeを保存
e = 0;
}
}
if (n > 1) prime[n] = 1; // 残った素数を追加
return prime;
};
2と3以外の素数は6の倍数 (multiple) の前後 (6m±1) に存在します。このため、5以降は交互に2、4ずつ離れた数で処理していくことで、除数から2と3の倍数を除外することができ、prime_factor_1()
関数と比較して計算速度が約1.5倍に向上します。
var prime_factor_2 = function(n) {
/* 素因数分解(2と3の倍数を除外) */
var prime = {}; // 素因数リスト
var e = 0; // 指数部
for (var divisor = 2, step = 1; divisor * divisor <= n; divisor += step) {
while (n % divisor == 0) {
n /= divisor;
e++;
}
if (e !== 0) {
prime[divisor] = e; // keyをdivisorとする連想配列にeを保存
e = 0;
}
if (divisor > 5) {
step = 6 - step; // stepは交互に2と4
continue;
}
if (divisor == 3) {
step = 2; // divisor=3,5のときはstep=2
}
}
if (n > 1) prime[n] = 1; // 残った素数を追加
return prime;
};
6m±1の中には5の倍数も含まれています。このため、除数を7〜31までの素数piに30の倍数を加えた数pi+30jに限定することで、5の倍数も除外することができ、prime_factor_2()
関数に対して計算速度が約1.2倍向上します。このように除数を最初の数個の素数の倍数を除いた数に絞り込む手法をWheel factorizationと言います。
このページでは素数階乗数pi#の判定用として43までの素数リストprime_listを保持していますので、これを流用しました。prime_list[0]はダミー要素、内側のfor文の条件式divisor < n
は計算中に除数divisorがn以上になった時点で計算を打ち切るためのものです。
var prime_list = [1, 2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43]; // 素数リスト
var prime_factor_3 = function(n) {
/* 素因数分解(2と3と5の倍数を除外) */
var prime = {}; // 素因数リスト
var e = 0; // 指数部
for (var i = 2, j = 0, divisor = 2; divisor * divisor <= n; i = 4, j += 30){
for (; i < 12 && divisor < n; divisor = j + prime_list[i], i++) {
while (n % divisor == 0) {
n /= divisor;
e++;
}
if (e !== 0) {
prime[divisor] = e; // keyをdivisorとする連想配列にeを保存
e = 0;
}
}
}
if (n > 1) prime[n] = 1; // 残った素数を追加
return prime;
};
関数の戻り値は素因数リストprimeで、大きさが素因数の個数r、キーが各素因数pi、値が素因数の指数部 (exponent) eiである連想配列になっています。これを利用してNの素因数分解の結果は以下の式の形で表すことができます。
ei=2fi+gi (gi = 0,1) とおくと、Nの無平方分解 lsf2×core は次式で表されます。これは √N=lsf√core と等価です。
素因数piが以下の2つの条件を同時に満たすときに、2個のゼロではない平方数の和 a2+b2 に分解できます。
この2条件を満たさない平方数、即ち core=1 となる数は 02+lsf2 の形で表すことができますが、下記のコードでは対応していません。
var fermat_sum = function(n, lsf, core) {
/* 二平方和分解 */
var is_core = core > 1; // 無平方因子が1ではない
var m = is_core ? core : n;
var b = is_core ? int_root(m, 2) : lsf - 1;
for (var bmin = b * Math.SQRT1_2, a = r = 0; b > bmin; b--) {
r = m - b * b;
a = Math.sqrt(r); // int_root(r, 2)より高速
if (a % 1 == 0) {
if (is_core) {
a *= lsf;
b *= lsf;
}
return a + '<sup>2</sup>+' + b + '<sup>2</sup>'; // HTML文字列
}
}
};
引数nに平方数の和の2条件を満たす自然数N、lsf とcore に無平方分解で得られた最大平方因子と無平方因子を与えます。bを√n未満の最大の整数からその√1/2 (≡Math.SQRT1_2) 倍まで1ずつ減少させ、aが自然数になった時点で計算を終了します。
[ 戻る ]
素因数分解の結果から直ちに素因数の個数、総数、和、総和と根基(総積)を求めることができます。
約数d|Nの個数、総和、総積とオイラーのφ関数は次式で求められます。総積が乗法的完全数になるときはその旨を表示します。
メビウス関数μ(N)は前述の定義に則り求めています。
数値の桁数はlengthプロパティでは取得できませんので、数値nを文字列に変換してから長さを取得することで桁数としています。
var digit_number = n.toString().length; // 桁数
数字和は10で除したときの剰余 (remainder) を順次加算して求め、商 (quotient) が0になるまで続けます。
var digit_sum = function(n) {
/* 数字和 */
var s = 0;
while (n) {
s += n % 10;
n = Math.floor(n / 10);
}
return s;
};
数字根は上記の digit_sum()
関数を利用し、再帰呼出し (recursive call) をすることで求めることができます。引数nが1〜9になった時点で再帰を終了します。
var digital_root = function(n) {
/* 数字根(再帰version) */
if (n < 10) return n;
return digital_root(digit_sum(n));
};
9で除したときの剰余を求め、0のとき9に置き換える手順でも数字根を求めることができます。しかし、引数nが0のときの結果は0ではなく9になってしまいます。
var digital_root = function(n) {
/* 数字根(剰余version) */
var r = n % 9;
return r ? r : 9;
};
このページでは再帰や三項演算子を使わない方法で求めています。JavaScriptでは剰余演算の符号が被除数 (dividend) と同一であるため、n=0のときは (0−1)%9=−1となります。これより数字根は0と求まります。
var digital_root = (n - 1) % 9 + 1; // 数字根(単純式version)
数字積は10で除したときの剰余を順に乗じることで求めています。商が0または途中でp=0になったときはwhileループから脱出します。
var digit_product = function(n) {
/* 数字積 */
var p = 1;
while (p && n) {
p *= n % 10;
n = Math.floor(n / 10);
}
return p;
};
逆順数は10で除したときの剰余を加算して求め、商が0になるまで続けます。剰余の加算時にそれまでに得られた値を10倍することで上位桁にシフトさせています。逆順数がNumber.MAX_SAFE_INTEGERより大きくなる時は下位桁に丸め誤差 (round-off error) を生じさせないように文字列に変換しています。
var digit_reverse = function(n) {
/* 逆順数 */
var r = 0;
while (n) {
r *= 10;
if (r > Number.MAX_SAFE_INTEGER) r = r.toString().slice(0, -1); // 末尾の1文字を削除した文字列に変換
r += n % 10;
n = Math.floor(n / 10);
}
return r;
};
[ 戻る ]
属する自然数の類の判定には下記の方法を採用しました。
[ 戻る ]
オンライン整数列大辞典 (OEIS) に掲載されている整数列 (integer sequence) の一覧です。
種類 | ID | 種類 | ID |
---|---|---|---|
最小素因数 | A020639 | 最大素因数 | A006530 |
最大平方因子 | A000188 | 無平方核 | A007913 |
二平方和 | A000404 |
種類 | ID | 種類 | ID |
---|---|---|---|
素因数の個数 | A001221 | 素因数の総数 | A001222 |
素因数の和 | A008472 | 素因数の総和 | A001414 |
根基 | A007947 | 約数の個数 | A000005 |
約数の総和 | A000203 | 約数の総積 | A007955 |
Eulerのφ関数 | A000010 | Mobius関数 | A008683 |
数字和 | A007953 | 数字根 | A010888 |
数字積 | A007954 | 桁数 | A055642 |
類名 | ID | 類名 | ID |
---|---|---|---|
素数 | A000040 | 奇素数 | A065091 |
ピタゴラス素数 | A002144 | ガウス素数 | A002145 |
合成数 | A002808 | 半素数 | A001358 |
楔数 | A007304 | 調和数 | A001599 |
完全数 | A000396 | 3倍完全数 | A005820 |
4倍完全数 | A027687 | 5倍完全数 | A046060 |
概完全数 | A000079 | 乗法的完全数 | A007422 |
三角数 | A000217 | 矩形数 | A002378 |
平方数 | A000290 | 立方数 | A000578 |
過剰数 | A005101 | 不足数 | A005100 |
フィボナッチ数 | A000045 | リュカ数 | A000032 |
ペル数 | A000129 | ヤコブスタール数 | A001045 |
メルセンヌ数 | A000225 | フェルマー数 | A000215 |
カレン数 | A002064 | ウッダル数 | A003261 |
中心二項係数 | A000984 | カタラン数 | A000108 |
モツキン数 | A001006 | モンモール数 | A000166 |
怠け仕出し屋数 | A000124 | ケーキ数 | A000125 |
多冪数 | A001694 | 累乗数 | A001597 |
アキレス数 | A052486 | 無平方数 | A005117 |
カーマイケル数 | A002997 | L-C数 | A006972 |
ハミング数 | A051037 | ハンブル数 | A002473 |
階乗数 | A000142 | 素数階乗数 | A002110 |
ユークリッド数 | A006862 | クンマー数 | A057588 |
スミス数 | A006753 | ハーシャッド数 | A005349 |
ズッカーマン数 | A007602 | タウ数 | A033950 |
算術数 | A003601 | ナルシシスト数 | A005188 |
回文数 | A002113 | 逆除数 | A008919 |
素数名 | 素数列のID | n値のID |
---|---|---|
フィボナッチ素数 | A005478 | A001605 |
リュカ素数 | A005479 | A001606 |
ペル素数 | A086383 | A096650 |
ヤコブスタール素数 | A049883 | A107036 |
メルセンヌ素数 | A000668 | A000043 |
カレン素数 | A050920 | A005849 |
ウッダル素数 | A050918 | A002234 |
フェルマー素数 | A019434 | A159611 |
モツキン素数 | A092832 | A092831 |
怠け仕出し屋素数 | A055469 | A067186 |
オイラー素数 | A005846 | A056561 |
階乗素数 (n!−1) | A055490 | A002982 |
階乗素数 (n!+1) | A088332 | A002981 |
ユークリッド素数 | A018239 | A005234 |
クンマー素数 | A057705 | A006794 |
ナルシシスト素数 | A145380 | - |
回文素数 | A002385 | - |
OEIS以外に各種の整数列を掲載しているサイトです。
[ 戻る ]
[ 戻る ]