###ルール
数値に4か9を含む素数をシクシク素数と呼ぶことにします
19とか41とか149とか。
標準入力として正の整数 N を与えたら N 番目までのシクシク素数を半角カンマ区切りで標準出力してください
例 N = 9 の場合、 19,29,41,43,47,59,79,89,97
N は最大で 100 とします
#ソースコード
sksk.cpp
#include <iostream>
#include <cstdio>
//数値から4と9を見つける
bool find49(std::int_fast32_t i49_) {
while (i49_)
switch (i49_ % 10) {
case 4:case 9: return true;
default: i49_ /= 10;
}
return false;
}
//素数を探す
void prime(const std::int_fast32_t n_) {
for (std::int_fast32_t i{ 1 }, prime{}, counter{};; ++i, prime = 0) {
for (std::int_fast32_t j{ 1 }; j <= i; ++j)
if (i % j == 0) ++prime;
if (prime == 2 && find49(i)) {
std::cout << i;
if (++counter != n_) std::cout << ',';
else break;
}
}
std::cout << std::endl;
}
//入力値のシクシク素数を返す
int main() {
std::int_fast32_t n;
std::cin >> n;
prime(n);
}
とりあえず30行で実装。
高速化はしてないです。
#実行結果
出力結果(入力7)
19,29,41,43,47,59,79
出力結果(入力9)
19,29,41,43,47,59,79,89,97
出力結果(入力19)
19,29,41,43,47,59,79,89,97,109,139,149,179,191,193,197,199,229,239
出力結果(入力22)
19,29,41,43,47,59,79,89,97,109,139,149,179,191,193,197,199,229,239,241,269,293
出力結果(入力49)
19,29,41,43,47,59,79,89,97,109,139,149,179,191,193,197,199,229,239,241,269,293,347,349,359,379,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,509,541,547,569
出力結果(入力100)
19,29,41,43,47,59,79,89,97,109,139,149,179,191,193,197,199,229,239,241,269,293,347,349,359,379,389,397,401,409,419,421,431,433,439,443,449,457,461,463,467,479,487,491,499,509,541,547,569,593,599,619,641,643,647,659,691,709,719,739,743,769,797,809,829,839,859,907,911,919,929,937,941,947,953,967,971,977,983,991,997,1009,1019,1039,1049,1069,1091,1093,1097,1109,1129,1193,1229,1249,1259,1279,1289,1291,1297,1319
##ソースコードのライセンス
These codes are licensed under CC0.
この記事のソースコードはCC0ライセンスとします。
ぜひ、自由に改変して遊んでみてください。