整数 N が与えられ、他の素数では割り切れず、2、3、および/または 5 でのみ割り切れる最初の N 個の要素を見つける必要があります。
例えば:
N = 3
Results: 2,3,4
N = 5
Results: 2,3,4,5,6
間違い数 = 55..55/5 = 11..11 これは素数です。55..55 は 2、3、5 とは異なる素数で割り切れるので、数えません。
再帰関数が必要だと思いますが、アルゴリズムがどのようになるか想像できません
探している数値は2^n * 3^m * 5^k
、n、m、kの正の整数、 。の形式n+m+k > 0
です。
ソートされた配列を事前に生成し、最初の配列を出力しN
ます。
2、3、または 5 でしか割り切れない唯一の数は、i、 j、 k = 0、1、...に対する2 i × 3 j × 5 kのべき乗です。
これらの数値は簡単に生成されます。
常に力ずくの方法があります:
int[] A = int[N];
int i=0;
int j=2;
while(i<N)
{
if(j%2==0)
{
if(j/2==1 || A contains j/2)
{
A[i]=j;
i++;
}
}
else if(j%3==0)
{
if(j/3==1 || A contains j/3)
{
A[i]=j;
i++;
}
}
else if(j%5==0)
{
if(j/5==1 || A contains j/5)
{
A[i]=j;
i++;
}
}
j++;
}
「AはXを含む」部分の場合、Aはそこでソートされるため、0からi-1の範囲で二分探索を使用できます。