for (int j = 2; j * j < b; j += i) {
// 処理
}
をRustで書くと、for文ではなく、while文になる。Rustの場合、for文は基本、for i in hoge となるから
let mut j = 2;
while j * j < b {
// 処理
j += i;
}
fn segment_sieve(a: i64, b: i64) {
let mut is_prime[bool; 22];
let mut is_prime_small[bool; 37];
for i in 0.. {
if i*i < b {
break;
}
is_prime_small[i] = true;
}
for i in 0.. {
if i < b - a {
break;
}
is_prime[i] = true;
}
for i in 2.. {
if i * i < b {
break;
}
if is_prime_small[i] {
let mut j = 2 * i;
while j * j < b {
j += i;
is_prime_small[j] = false;
}
let mut j = max(2LL, (a + i - 1) / i) * i;
while j < b {
j = j + i;
is_prime[j - a] = false;
}
}
}
}