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; } } } }