Alteryxの数式エディタで利用する関数を自作することができます。その機能を利用し、与えられた数字が素数かどうかTrue/Falseで返すカスタムフォーミュラIsPrime()を作りました。以下サイトを参考に適切な場所に添付XMLを配置して使ってください。
https://help.alteryx.com/current/ja/designer/functions/build-custom-formula-functions.html
申し送り事項
・対応している数字は1000万までです。それを超えると判定できないので、素数であってもFalseで返ってきます。ご注意ください。
・行数が数万行レベルになると時間がかかります(既知の素数一覧と一致するかのロジックになってるので処理が重めです)
@AkimasaKajitani @Yoshiro_Fujimori @DaisukeTsuchiya @Qiu
例のEuleryxで素数使う問題が多いので、作ってみました。Base-Aに抵触するのかは微妙ですが、まぁ個人で楽しむ分にはいいのかなと。
解決済! 解決策の投稿を見る。
@gawa
素晴らしいですね。使ったみたいと思います。
> Base-Aに抵触するのかは微妙ですが
判定の元となる素数のリストを Alteryx で求めたのであれば OK ではないかと。
@gawa
"Accept as Solution"を押せる権限をもらったので、解決済みにしてみました。いやこれは凄いです。Alteryx の反復マクロでは、かなり高速化したつもりでも1000万件で1分半かかりました。
そもそもなんのために素数をカスタムフォーミュラで判定しようとしているのか、ですが、グローバルのコミュニティにて、Euleryxという数学のクイズを解くというイベント?が開催されています。現在本家のサイト https://projecteuler.net/about では957問まで公開されていますが、これをAlteryxで解いちゃおう、ということで、以下のコミュニティのスレッドでみなさん挑戦しています(日本のACEのみなさまが熱中しております)。
Euleryx: Let The Games Begin!
https://community.alteryx.com/t5/General-Discussions/Euleryx-Let-The-Games-Begin/td-p/1405584
常設されているミニAdvent of Codeみたいなものですかね・・・。
@DaisukeTsuchiya カスタム関数を使わずにAlteryxの純機能だけでどれくらい時間短縮できるか頑張ってみましたが、1,000万までの素数で45秒が限界でした。WF添付します。
短縮のTipsとして以下を活用しました:
・反復マクロより、行生成を使う方が速そうです(AoCで経験しているように、反復マクロはIteration間の処理が重い)
・2,3以外の素数は6N+1 or 6N-1になるので、調べる件数を減らせる