n!の素因数分解
10!は2⁸ × 3⁴ × 5² × 7に分解でき、巨大な積を計算しなくてもこの一覧が得られます。0から100000までのnを入力すると、n以下のすべての素数とその指数をルジャンドルの公式で求めます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
nの階乗の素因数分解は数論の古典的結果です。n以下の素数はすべてn!に現れ、その正確な冪は巨大な積1×2×…×nを一度も書き下すことなく、ルジャンドルの公式で与えられます。学生、競技プログラマ、暗号の学習者は、二項係数、p進付値、階乗の整除判定のためにこれらの指数を必要とします。本能力はnまでの素数を篩で列挙し、各素数についてfloor(n/p)+floor(n/p²)+…を足し上げ、素数と指数の対の順序付きリストを返します。
ルジャンドルの公式が計算するものと、n!を展開するより優れる理由
非負整数nに対し、n! は1からnまでの正の整数の積です(0!=1! =1とする)。 nが数十に達すると、n!の十進値は固定幅の整数型が収めるより速く増えるため、その積をすべて書き下すのは現実的ではありません。
それでもn! の素因数分解は短い閉形式で完全に決まります。pが素数でp≤nなら、n!におけるpの指数は見た目は無限だが有限の和floor(n/p)+floor(n/p²)+floor(n/p³)+…に等しく、p^kがnを超えた時点で打ち切ります。
この恒等式がルジャンドルの公式(ド・ポリニャックの公式とも呼ばれます)。積1·2·…·nを展開するとき、p、p²、p³などの倍数がいくつpの因子を寄与するかを数えます。=2^8×3^4×5^2×7です。
乱数も標本も多倍長の階乗も不要で、整数除算と素数の一覧だけで足ります。
入力のしかたと結果の読み方
nは0以上10万(100000)以下の整数です。成功時はacceptedとしてnを返し、factorsをprimeとexponentを持つオブジェクトの昇順リストとして返します。nが0または1のとき、両方の階乗が1で1に素因数がないため、因数リストは空です。
競技ソルバ、授業デモ、二項係数の付値スクリプト、あるいは計算機代数系を入れずにn!の再現可能な分解が必要な任意のワークフローからご利用ください。
階乗の素因数分解が実務で現れる場面
階乗のp進付値は、二項係数を簡約するとき、多項係数を割る素数の最高冪を求めるとき、ある整数で階乗が割り切れることを示すときに現れます。競技プログラミングでは、n!におけるpの指数や、穏やかなn上限のもとでのn!
の完全分解を問う問題が多く、ルジャンドルの公式が標準の答えです。授業では、25! が5でちょうどfloor(25/5)+floor(25/25)=5+1=6回割り切れることを示すと、掛け算の壁なしに数え上げの議論が具体化します。暗号や数論のノートでは、滑らかな数やプリモリアルの例の部品としてn!
の素数シグネチャが必要になることがあります。篩とルジャンドルのループがエッジWorker上で対話的に保てるよう、nは公開上限内に保ってください。巨大なnには専用の多倍長スタックが必要で、この軽量なparse能力では足りません。
活用例
宿題とコンテストでのp進付値の確認
学生と競技者は、ルジャンドルの公式に依存する証明やプログラム解答を提出する前に、n!における各素数の指数を検証できます。
滑らかな数と階乗のデモを組み立てる
教材ノートや趣味の数論ツールは、完全な階乗値を展開せずにn!の素数シグネチャを表示できます。
よくある質問
nの階乗の素因数分解とは何ですか?
p≤nの各素数を、ルジャンドルの公式floor(n/p)+floor(n/p²)+…(冪がnを超えるまで)で与えられる指数に上げた積です。
この計算機はどうやってn!を直接計算せずに済むのですか?
篩でnまでの素数を列挙し、各素数にルジャンドル和を適用します。n! の巨大な十進値は構築しません。
0!と1!は何を返しますか?
どちらも1なので、応答のfactors配列は空です。列挙すべき素因数はありません。
25!は5で何回割り切れますか?
ちょうど6回です。25までに5の倍数が5個あり、さらに25の倍数が1個あって5をもう1つ持つため、5と1を足して6になります。
nはいくつまで入力できますか?
0から100000までの整数を入力できます。負の数や小数、上限を超える値は受け付けないので、結果が出る前に入力を見直せます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/factorial-prime-factors \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":10}'const res = await fetch("https://api.kit.forhosting.com/numth/factorial-prime-factors", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 10
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/factorial-prime-factors",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 10
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/factorial-prime-factors", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":10}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":10}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/factorial-prime-factors", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 10
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.factorial_prime_factors",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
制限
max_n | 100000 |
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
決定的でオフライン、宿題パイプラインや自動採点にAPI経路を組み込む前に、ブラウザで無料で試せます。
ルジャンドルの公式が計算するものと、n!を展開するより優れる理由
例えばn=10では10以下の素数は2,3,5,7であり、2の指数はfloor(10/2)+floor(10/4)+floor(10/8)=5+2+1=8、3は3+1=4、5は2、7は1なので10!
APIの呼び出し方と応答の内容
必須フィールドnを1つ持つJSON本体を送ってください。同じフィールドにaliasのnumberとvalueも受け付けるので、ブラウザのフォームとスクリプトが1つの契約を共有できます。n欠落、非整数、小数、負のn、公開上限超過などの検証失敗はinvalid_inputを返し、課金されません。料金は成功リクエスト1件あたり固定の$0.002です(限界単価ゼロの単位項目)。
階乗の素因数分解が実務で現れる場面
負の入力は、このAPI契約では負の整数に実階乗が定義されないため拒否されます。
連携の活用例
素因数分解から二項係数を簡約する
C(n,k)で素数を打ち消すスクリプトは、本エンドポイントからn!、k!、(n−k)!の分解を取り、指数を決定的に引き算できます。
技術的な質問
nが負の場合はどうなりますか?
負のnはinvalid_inputで拒否されます。ここでの階乗は、公開範囲内の非負整数にのみ定義されます。
階乗の素因数分解ツールは無料ですか?
ブラウザツールは無料でローカルに動作します。API呼び出しは成功リクエストあたり$0.002で前払いKIT残高を使い、失敗タスクは課金されません。