Free Trial

ウィークリーチャレンジリポジトリ

トップになるためのスキルをお持ちですか? ウィークリーチャレンジを購読しましょう。ベストを尽くして問題を解決し、解決策を共有して、他のユーザーがどのように同じ問題に取り組んだのか確認しましょう。私たちも解答例を共有しています。

チャレンジ #35: 素数の生成

Mukai
コメット

投稿します。

スポイラ
Mukai_0-1658279641306.png

 

dyamaguchi
アステロイド

投稿します。

スポイラ
Snipaste_2022-07-25_14-23-21.png

Yoshiro_Fujimori
オーロラ

やりたいアイデアは簡単なのですが、ワークフローにするのに苦労しました(勉強になりました)。

 

スポイラ

アイデア

リストの一番上の数字で残りの行の剰余をとり、割り切れないものを残す

残ったリストについて上を繰り返す

苦労した点

一つのマクロでは対応できないこと

・一番上の数字を他のツールに渡す方法(→バッチマクロのコントロールパラメータを使いたい)

・同じ処理を繰り返す方法(→反復マクロを使いたい)

解決策

結局、マクロをネストすることで解決しました。

・リストの1行目にあるデータ(今までに見つかった最小の素数)を Filter ツールに渡すためのバッチマクロ

・そのマクロに 自然数のリスト と 次に処理するべき素数を渡して反復処理させるための反復マクロ

問題どおりの50までの自然数で0.5秒かかりました。

50,000までの自然数でやってみると、5133個の素数(=5133回の反復)で44.8秒かかりました。

将来の課題

また、全体の半分(50だったら25)の処理を超えたら残っているものはすべて素数のはずだから、

処理を中断して残りのリストを全部 出力するようにすると、処理が効率化できると考えています。

50,000件の処理であれば恐らく2762回の反復、24秒程度で終わると期待されます。

ただ、それをすると反復マクロを終了する条件を渡す必要があり、さらに複雑になりそうなので、今回は見送りました。

簡単で良い方法があればお知らせください。


メイン

Yoshiro_Fujimori_1-1663032562637.png

 

反復マクロ
Yoshiro_Fujimori_0-1663032518386.png


バッチマクロ

Yoshiro_Fujimori_2-1663032645736.png