[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |
25.1 factor : 素因数を出力 | Show factors of numbers. | |
25.2 seq : 数列を出力 | Print sequences of numbers. |
factor
: 素因数を出力
factor
は素因数を出力します.概要です.
factor [number]... factor option |
コマンドラインにnumberが指定されない場合,factor
は標準
入力から読み込み,それは,改行,タブ,またはスペースで区切られています.
オプションは,`--help'と`--version'のみです. See section 2. 共通のオプション.
使用するアルゴリズムは,あまり洗練されたものではないので,入力によって
はfactor
の実行に時間がかかることがあります.factor
にとって最も厳しいものは,大きな素数の乗数です.二つの大きな32ビットの
素数の乗数を素因数分解すると,400MHz Pentium IIで十分以上のCPU時間がか
かります.
$ p=`echo '4294967279 * 4294967291'|bc` $ factor $p 18446743979220271189: 4294967279 4294967291 |
反対に,factor
は,大きな64ビットの数字を十秒ちょっとで素因数
分解します.
$ factor `echo '2^64-1'|bc` 18446744073709551615: 3 5 17 257 641 65537 6700417 |
seq
: 数列を出力
seq
は,数字の列を標準出力に出力します.概要です.
seq [option]... [first [increment]] last... |
seq
は,firstからlastまでincrementおきに,
数字を出力します.デフォルトで,firstとincrementは両方とも
1で,それぞれの数字は単独行に出力されます.すべての数字は実数ですが,
整数のみではありません.
プログラムは以下のオプションを受け入れます.2. 共通のオプションも参照 してください.
大きな整数値の列を出力するためにseq
を使用したい場合,精度が
悪くなるのでデフォルトの`%g'書式を使用しないで下さい.
$ seq 1000000 1000001 1e+06 1e+06 |
代わりに,指数も十進数の点も使用せずに十進数を出力するため,書式 `%1.f'を使用することが可能です.
$ seq --format=%1.f 1000000 1000001 1000000 1000001 |
16進数で出力したい場合,変換を実行するためにprintf
を使用する
ことが可能です.
$ printf %x'\n' `seq -f %1.f 1048575 1024 1050623` fffff 1003ff 1007ff |
非常に長い数字のリストに対しては,引数リストの長さにおけるシステムの制
限を避けるためxargs
を使用して下さい.
$ seq -f %1.f 1000000 | xargs printf %x'\n' | tail -n 3 f423e f423f f4240 |
八進数を生成するために,%x
の代わりにprintf
の%o
書式を使用して下さい.しかし,printf
の使用は2^32
未満
の整数でのみ動作することに注意して下さい.
$ printf "%x\n" `seq -f %1.f 4294967295 4294967296` ffffffff bash: printf: 4294967296: Numerical result out of range |
ほとんどのシステムで,seq
は最大2^53
まで値ですべての数
字を生成することが可能なので,そのような大きな数をより強固に生成するた
めに,基数変換のより一般的な手法として以下のものがあります.それは,
bc
を使用し,出力の基数の値を設定することで動作し,以下では16進
数の出力を行なう状況として,obaseを`16'にしています.
$ (echo obase=16; seq -f %1.f 4294967295 4294967296)|bc FFFFFFFF 100000000 |
Be careful when using seq
with a fractional increment,
otherwise you may see surprising results. Most people would expect to
see 0.3
printed as the last number in this example:
seq
を小数のincrementで使用しているとき注意しないと,びっ
くりするような結果になる可能性があります.以下の例では,最後の値が
0.3
になることを,ほとんどの人が期待するでしょう.
$ seq -s' ' 0 .1 .3 0 0.1 0.2 |
しかし,seq
が二進数の浮動小数点(Cのdouble
型)で計算し
ているため,ほとんどのシステムでそうはなりません -- つまり,十進数の
.1
は正確に表現できないことを意味します.つまり,.1 * 3 >
.3
のような非直観的な条件式が,結局は正しいということを意味しています.
上記の例を回避するため,lastの値にちょっと大きい数字を使用して下 さい.
$ seq -s' ' 0 .1 .31 0 0.1 0.2 0.3 |
一般的に,小数部分でincrementを使用しているとき,そして
(last - first) / incrementが(数学的に)整数であっても
lastが確実にseq
で出力される最終値になるように,
lastの値をわずかに大きい(またはincrementが負の場合は小さい)
値に指定して下さい.
[ << ] | [ >> ] | [Top] | [Contents] | [Index] | [ ? ] |