A 回答 (5件)
- 最新から表示
- 回答順に表示
No.5
- 回答日時:
それはCGIの領域に入るので質問の意図と違ってくるかと思います。
もう私しか見てないようですし、改めてスクリプトを全て載せた上で質問するとよろしいかと思われます。
No.4
- 回答日時:
その警告を出さないようにスクリプトではbinmode STDOUT, ':utf8'をしています。
デフォルトではASCII領域外(Unicode(UTF-8?)の255より大きい文字コード)の文字に遭遇するとその警告が出ます。(√の文字とか)
詳しくはperldoc perldiagの"Wide charater in %s"の部分やperldoc -f binmodeを参照してください。
この回答への補足
素早い解答ありがとうございます。
コマンドプロンプトでその警告が出る件はわかりました。
(まだ出ますが・・・)
このスクリプトの最下部のprintの上の行にContent-type: text/htmlを出力させ、それをネット上にアップロードして実行しましたが500エラーです。
ネット上で使うにはどうすればいいのでしょうか。
No.3
- 回答日時:
あれ、てっきりこういうことかと思ってました。
----------------------------------
root_of(1):
root_of(2): √2
root_of(3): √3
root_of(4): 2
root_of(5): √5
root_of(6): √6
root_of(7): √7
root_of(8): 2√2
root_of(9): 3
root_of(10): √10
----------------------------------
root_of(1)は何も表示されませんので注意。
root_format(primes_of(12))
は
{
square => 2,
root => 3,
}
を返します。
質問者さんのスクリプトに流用する場合はそちらを使っていただければ。
出力の表示の仕方がそのままでいいならroot_of()でかまいません。
注意点は
- 引数は正の整数
- 効率については思いつくままに書いたのであまり考えていない...
- 数学の知識に乏しいので用語が間違っているかもしれない...
などなど...
----------------------------------
use strict;
use warnings;
use utf8;
# from: 12
# to: (2 => 2, 3 => 1)
sub primes_of {
my ($int) = @_;
my $half = $int / 2;
my $i = 2;
my %primes;
while ($i <= $half) {
if ($int % $i == 0) {
$primes{$i} = exists $primes{$i} ? $primes{$i} + 1 : 1;
$int /= $i;
} else {
$i++;
}
}
if ($int != 1) {
$primes{$int} = exists $primes{$i} ? $primes{$i} + 1 : 1;
}
%primes;
}
# from: (2 => 2, 3 => 1)
# to: {square => 2, root => 3}
sub root_format {
my %primes = @_;
my ($square, $root) = (1, 1);
while (my ($prime, $num) = each %primes) {
while ($num >= 2) {
$square *= $prime;
$num -= 2;
}
$root *= $prime if $num == 1;
}
+{square => $square, root => $root};
}
# from: 12
# to: "2√3"
sub root_of {
my ($int) = @_;
my $formatted = root_format(primes_of($int));
($formatted->{square} == 1 ? '' : $formatted->{square}) .
($formatted->{root} == 1 ? '' : '√'.$formatted->{root});
}
binmode STDERR, ':utf8';
print "root_of($_): @{[ root_of($_) ]}\n" for 1 .. 10;
----------------------------------
この回答への補足
どのように使用するのでしょうか;
コマンドプロンプトでそのまま実行してみたところ、
Wide character in print at C:\root_math.pl line 58.
root_of(1):
Wide character in print at C:\root_math.pl line 58.
root_of(2): √2
Wide character in print at C:\root_math.pl line 58.
root_of(3): √3
Wide character in print at C:\root_math.pl line 58.
root_of(4): 2
Wide character in print at C:\root_math.pl line 58.
root_of(5): √5
Wide character in print at C:\root_math.pl line 58.
root_of(6): √6
Wide character in print at C:\root_math.pl line 58.
root_of(7): √7
Wide character in print at C:\root_math.pl line 58.
root_of(8): 2√2
Wide character in print at C:\root_math.pl line 58.
root_of(9): 3
Wide character in print at C:\root_math.pl line 58.
root_of(10): √10
のように表示されます。
また、print &root_of(12);と追記した場合は
Wide character in print at C:\root_math.pl line 58.
2√3
と表示されます。
浅い知識しかありません;
どうすればいいのでしょうか?
No.2
- 回答日時:
>#1
未検証。
Math::Big::Factorsとか使ったりして楽にかけないかなあ?
http://search.cpan.org/~tels/Math-Big-1.12/lib/M …
Perlに苦手意識持ってて実行環境整備してないのでメモのみ。
No.1
- 回答日時:
めんどくせ~.
整数に限定していいなら
sub introot {
my ($n) = @_;
for ($i = int(sqrt($n)); $i > 1; --$i) {
return "$i√${[$n/($i*$i)]}" if $n % ($i*$i) == 0;
}
"√$n";
}
でいいかも. ま, 人間がやってることを素直に Perl に直しただけなんだが.
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・【お題】絵本のタイトル
- ・【大喜利】世界最古のコンビニについて知ってる事を教えてください【投稿~10/10(木)】
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・ハマっている「お菓子」を教えて!
- ・最近、いつ泣きましたか?
- ・夏が終わったと感じる瞬間って、どんな時?
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・都道府県穴埋めゲーム
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Image::Magickの使い方を教えて...
-
例外処理のフローチャートの記...
-
LCD ディスプレイを Raspberry ...
-
VBSがコンパイルエラーになりま...
-
モジュールの最大数はいくつな...
-
Excel VBAでリンク切れをチェッ...
-
perl で 64ビットint を扱うには?
-
Excel VBA 『Call』で呼び出す...
-
VBAで別モジュールへの変数の受...
-
「デバイスは PRN を初期化でき...
-
Access VBA標準モジュールにつ...
-
ユーザー定義関数に#NAME?が返...
-
ベースモジュールって?
-
Perlソースコードをコンパイル...
-
vba 標準モジュールインポート...
-
VBA This Workbookモジュール...
-
Excel VBA 定義されたプロージ...
-
'Range'メソッドは失敗しました
-
Perl+DBD::Oracleのエラーがわ...
-
DB_Fileモジュールインストール...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エラー
-
perlスクリプト s/^\\s+//; ...
-
PerlからSSLのページを読み込み...
-
perlでactive directoryに登録
-
awkのtoupper()
-
「CGIプログラムエラー」って何...
-
UTF-8で書かれたHTMLファイルを...
-
メールフォームからの受信メー...
-
実行時パラメータを使用するとE...
-
メールフォームから大きめの添...
-
bashのgrepで複数の検索、かつ...
-
PerlでIPアドレスを取得する方法
-
EUCのデータファイルをShift_ji...
-
$com::VDの意味がわかりません
-
例外処理のフローチャートの記...
-
Excel VBAでリンク切れをチェッ...
-
LCD ディスプレイを Raspberry ...
-
「デバイスは PRN を初期化でき...
-
ユーザー定義関数に#NAME?が返...
-
VBSがコンパイルエラーになりま...
おすすめ情報