use gcd::Gcd;
use p3_field::PrimeField64;
pub fn poseidon2_round_numbers_128<F: PrimeField64>(width: usize, d: u64) -> (usize, usize) {
assert_eq!(d.gcd(F::ORDER_U64 - 1), 1);
let prime_bit_number = F::ORDER_U64.ilog2() + 1;
match prime_bit_number {
31 => match (width, d) {
(16, 3) => (8, 20),
(16, 5) => (8, 14),
(16, 7) => (8, 13),
(16, 9) => (8, 13),
(16, 11) => (8, 13),
(24, 3) => (8, 23),
(24, 5) => (8, 22),
(24, 7) => (8, 21),
(24, 9) => (8, 21),
(24, 11) => (8, 21),
_ => panic!("The given pair of width and D has not been checked for these fields"),
},
64 => match (width, d) {
(8, 3) => (8, 41),
(8, 5) => (8, 27),
(8, 7) => (8, 22),
(8, 9) => (8, 19),
(8, 11) => (8, 17),
(12, 3) => (8, 42),
(12, 5) => (8, 27),
(12, 7) => (8, 22),
(12, 9) => (8, 20),
(12, 11) => (8, 18),
(16, 3) => (8, 42),
(16, 5) => (8, 27),
(16, 7) => (8, 22),
(16, 9) => (8, 20),
(16, 11) => (8, 18),
_ => panic!("The given pair of width and D has not been checked for these fields"),
},
_ => panic!("The optimal parameters for that size of prime have not been computed."),
}
}