スミス数チェッカー
合成数の各桁の和が、素因数の各桁の和と等しいかを判定します。22は2 + 2が2 × 11から得られる2 + 1 + 1と等しいので、スミス数です。両方の和が表示されます。ブラウザで無料で使えます。
- 無料
- ブラウザで動作
- 登録不要
- データは端末の外に出ません
無料で実行
計算例
- N
- 22
- 桁の和
- 4
- 因数の桁の和
- 4
スミス数チェッカーは娯楽数論の定番の問いに答えます:合成数nについて、nの10進の桁の和は、多重度込みで数えたnの素因数の桁の和に等しいか?合成数nを指定すると、このツールはnの桁の和、素因数分解の桁の和、素数べきの因数、そしてその2つの和が一致するときにちょうどtrueとなる真偽値のsmithフラグを返します。有名な例には22(2+2は、因数の2と11から得られる2+1+1に等しい)や27(2+7は3+3+3に等しい)があります。エンジンは決定的な試し割りと正確な整数の桁の走査を使うため、結果は浮動小数点のずれがなく、実行のたびに同一です。通信を呼び出すことも、ランダム性をサンプリングすることも、時計に依存することも一切ありません。宿題やコンテスト対策、OEIS風の探索にはブラウザで無料でご覧ください。
スミス数とは何か、結果に表示される内容
スミス数とは、10進の桁の和が、因数分解におけるべき乗に応じて各素数を繰り返した、nのすべての素因数の桁の和に等しくなる合成整数nです。素数は定義により除外されます:素数の因数分解は素数自身なので、桁の和は自明に一致してしまい、この性質は面白みがなくなります。最小のスミス数は4です:桁の和4は、因数分解2の2乗からの2+2に等しくなります。
22は最もよく知られる2桁の例です:2+2は、2×11からの2+1+1に等しくなります。27は2+7が9になり、3の3乗が3+3+3という寄与をするため成立します。6は合成数ですがスミス数ではありません:桁の和6に対して2+3=5です。
スミス数の比較なしで単に整数の素因数分解だけが必要な場合は、専用の素因数分解ツールをお使いください。このページが答えるのは両方の桁の和を含むスミス数の問いです。
入力の読み取り方と桁の和の正確さの保ち方
正の値には先頭の任意のプラス記号が許可されますが、埋め込まれた空白、16進数のプレフィックス、指数表記は不正なセルが誤ったフラグにすり替わることを防ぐため拒否されます。このチェッカーでは合成数の正の整数についてスミス数を定義するため、負の整数と2未満の値は拒否されます。
エンジンはJavaScriptの安全な整数の範囲内にとどまり、これは授業の問題、プログラミングコンテスト、そして中程度に大きなnに対するほとんどの応用チェックには十分すぎるほどです。内部では、数は試し割りで因数分解されます:2の因数を取り除き、残りの共役因子の平方根まで奇数の候補を歩き、1より大きい残りの素数で仕上げます。
各素数べきp^eについて、因数の桁の和はpの10進の桁の和のe倍を加えます。n自身の桁の和は10による反復除算で計算されます。僅差の整数を誤ってスミス数と判定してしまうような浮動小数点のステップはありません。
スミス数の判定が学習・研究デモ・コードで果たす役割
学生は、完全数、過剰数、ハーシャッド数と並んで、娯楽数論、桁ベースの性質、合成数の面白さを探索するときにスミス数に出会います。教師は、因数分解のステップを隠す不透明な電卓アプリを信用せずにワークシートの解答例を生成できます。
開発者は、同じ契約を使って数論ライブラリのサンプルデータを検証したり、ランダムな整数生成器に対するプロパティテストをゲート化したり、デモンストレーションのステップの前にシードがスミス数のクラスに属するかを事前確認したりします。
コンテストの練習では、OEISの表をダウンロードせずに解答を確認できるよう、スミス数の答えの高速なオフラインソースがよく必要とされます。素数べきだけが必要な場合は素因数分解と、約数和の分類が必要な場合は過剰数チェッカーと、桁の和ではなくペアごとのgcdテストが必要な場合は互いに素チェッカーとも組み合わせてください。
活用例
宿題とコンテストの分類
手作業で因数分解せずに桁の和を比較することで、ワークシートやコンテストのチェック用に合成整数がスミス数かどうかを判定します。
決定的なテストフィクスチャ
静的なOEISのダンプを埋め込まずに、単体テストやプロパティチェック、CIアサーション向けに再現性のあるスミス数・非スミス数の合成数を生成します。
桁の和の面白さの指導
無料でブラウザ上でnをライブに変えながら、nの桁の和が素因数の桁の和とどう一致するかを学生に示します。
よくある質問
nが素数または2未満の場合はどうなりますか?
実際にはスミス数はn≥4の合成整数に対してのみ定義されます。このツールはn<2とすべての素数を拒否します。
因数の桁の和はどう計算されますか?
nを多重度込みで素数に因数分解します。各素数べきp^eについて、pの10進の桁の和のe倍を加えます。その合計をnの桁の和と比較します。
このアルゴリズムはランダム化されていますか?
いいえ。 決定的な試し割りと正確な桁の和を使います。同じnは常に同じ因数、桁の和、smithフラグを返します。
素因数分解とはどう違いますか?
素因数分解は1つの整数の素数べきを返します。このツールは合成数を因数分解し、その桁の和が多重度込みのそれらの因数の桁の和に等しいかどうかを報告します。
6はなぜスミス数ではないのですか?
各桁の和は6ですが、素因数2と3の和は5にしかならないからです。6は合成数なので、エラーではなく正しい「いいえ」の結果として表示されます。
関連ツール
開発者向け — APIアクセス
このページの機能はすべてAPIからも利用できます。自社システムに組み込みたいチーム向けのセクションです。それ以外の方は上のツールをそのままお使いください。
エンドポイント
Bearerトークンで認証し、POST1回でタスクをキューに登録します。結果はWebhookまたは署名付きリンクで受け取れます。
お使いのスタックから呼び出す
curl -X POST https://api.kit.forhosting.com/numth/smith-number \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":22}'const res = await fetch("https://api.kit.forhosting.com/numth/smith-number", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 22
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/numth/smith-number",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 22
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/numth/smith-number", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":22}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":22}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/numth/smith-number", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)リクエスト例
{
"n": 22
}レスポンス例
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "numth.smith_number",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}非同期APIです。task_idは即時に返ります。ポーリングは1秒あたり1リクエストまでです。
料金
単価はすべて公開しています。トークン換算や独自クレジットはありません。失敗したタスクは課金されません。
エラー
| HTTP | コード | 意味 |
|---|---|---|
401 | unauthorized | APIキーが無効か、指定されていません。Authorizationヘッダーを確認してください。 |
402 | insufficient_balance | 残高が不足しています。チャージ後に再度お試しください。 |
404 | unknown_type | 指定されたタスクタイプは存在しません。タイプ名を確認してください。 |
429 | rate_limited | リクエストが多すぎます。しばらく待ってから再度お試しください。 |
技術的な注記
分類パイプラインや採点スクリプト、再現性のあるスミス数の回答が必要な教育デモを自動化する場合は、成功したリクエストごとに$0.002のAPIをご利用ください。
スミス数とは何か、レスポンスに含まれる内容
したがってこのチェッカーは素数と2未満のnをすべてinvalid_inputで拒否し、合成数のみを分類します。レスポンスには常に、解析済みのn、digit_sum、factor_digit_sum、底と指数のペアとしての昇順の素数べきのリスト、そして2つの和が等しいときのみtrueとなるsmithが含まれます。非スミス数の合成数はsmithがfalseの有効な成功レスポンスであり、エラーではありません。フィールドの欠落、非整数、分数、指数表記、安全な整数範囲外の値、2未満のn、そして素数はすべてinvalid_inputと明確なメッセージで失敗します。
入力の読み取り方と桁の和の正確さの保ち方
優先されるフィールドはJSON整数としてのnですが、10進数文字列とnumber・valueというエイリアスも受け付けるため、フォームやスプレッドシート、クエリ文字列が1つの契約を再利用できます。
スミス数の判定が学習・研究デモ・コードで果たす役割
このページでは処理はすべてブラウザ内で完結し、API経由では成功した照会1件ごとに$0.002かかり、検証に失敗した場合は課金されず、レスポンスを返した後は何も保存されません。無料のインタラクティブな検証と、同一の結果を返す有料APIというこの分離はKITのtier Aカタログ全体の方針と一致しており、教室でのデモから自動パイプラインへ、数学的な結果を変えることなく移行できます。
技術的な質問
スミス数チェッカーの料金は?
このページのブラウザ上では無料です。API経由では成功したリクエストごとに$0.002かかり、無効な入力には課金されません。