HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2010
0324
s素数9解決


s

リンク

2010/3/24(Wed) 01:11:10|NO.31515

ある数Aからある数Bの間に素数が存在するかを
求める方法がわかりません。
教えてください。

素数の求め方はわかります。



この記事に返信する


ANTARES

リンク

2010/3/24(Wed) 03:03:37|NO.31517

 当然、1つずつ素数かどうか調べていく方法が考えられますが、
もっとスマートな方法を求めているのでしょうか?

http://ja.wikipedia.org/wiki/%E7%B4%A0%E6%95%B0%E5%88%A4%E5%AE%9A



hatter

リンク

2010/3/24(Wed) 10:05:38|NO.31521

こんな感じになると思います。これ以上の効率的なアルゴリズムは分かりません。

#module #defcfunc IsPrimeAB int A,int B repeat B-A+1,A if IsPrimeC(cnt)=1:return 1 loop return 0 #defcfunc IsPrimeC int A i=2:while i*i <= A if(A\i = 0):return 0 i++ wend return 1 #global input A:input B button "決定",*Enter stop *Enter A=int(A):B=int(B) if A > B:A = A xor B:B = A xor B:A = A xor B if IsPrimeAB(A,B)=1{ mes ""+A+"〜"+B+"の間に素数はある" }else{ mes ""+A+"〜"+B+"の間に素数はない" }



skyblue

リンク

2010/3/24(Wed) 11:56:09|NO.31523

>ある数Aからある数Bの間に素数が存在するかを
>求める方法がわかりません。
ループを使って始値をAに終値か+1をBにするという方法があります。



s

リンク

2010/3/24(Wed) 16:15:10|NO.31527

hatterさんの方法を使わせていただこうと思います。
ですが、このソースが何をしているのかよく理解できません。
どなたか説明してください。



hatter

リンク

2010/3/24(Wed) 18:14:06|NO.31531

どのレベルで分からないのでしょうか?
#defcfunc,#global,#modeule(プリプロセッサ)でしょうか?
それとも、全体の流れでしょうか?

一応、流れとしては
#module〜#globalまでで関数を実装して、
後半はそれを利用してるだけです。ので後半部分は比較的単純。
A = A xor B:B = A xor B:A = A xor B
は、AとBの値の入れ替えを行っています。
IsPrimeCは引数に指定された値が素数なら1、素数ではないなら0を返します。
IsPrimeABは引数に指定された区間で素数があるなら1、素数がないなら0を返します。
IsPrimeCではwikipediaのC言語による素数判定(試し割り)のプログラム例を
簡略化してHSP用に書き換えた物です。
IsPrimeABではrepeatでB-A+1回ループを初期値Aで行います。(=A〜Bまで全ての値)
で、それらの値をIsPrimeC関数にかけて、1が返ってきたらすぐに1を返し
ループが何事もなく終わったら0を返してます。



ANTARES

リンク

2010/3/25(Thu) 03:47:37|NO.31546

 スタックオーバーフローが出そうな気がするけど、大丈夫?



hatter

リンク

2010/3/25(Thu) 08:33:20|NO.31551

> スタックオーバーフローが出そうな気がするけど、大丈夫?
わかりません。
そもそもスタックのオーバーフローってどういうときに起きるんですか?
repeat内でreturnを使っていてネストが深くなると起こるのでしょうか?
それとも、スタック領域がメモリを喰い尽くしたときでしょうか?

デバッグウィンドウみる限り少なくともlooplevは1を保ち続けてますし、
私の環境では処理を繰り返してもなかなかエラーが出ないのでとりあえず、
これでいいかな〜とおもってます。(repeatのネストが深くならないのはよく分からないけど)



s

リンク

2010/3/25(Thu) 16:40:26|NO.31560

hatterさん、他の皆様、ありがとうございました。
これで解決しました。



s

リンク

2010/3/26(Fri) 00:00:25|NO.31573

hatterさんの方法に誤りがあったので、こちらのページに訂正があります。
http://hsp.tv/play/pforum.php?mode=all&num=31561



ONION software Copyright 1997-2021(c) All rights reserved.