euler87: Rust und C durch Schleifentausch beschleunigen

Wenn man die innere (hoch 4) und die äußere Schleife (hoch 2) tauscht,
wird das C-Programm ca. 10% und das Rust-Programm ca. 25% schneller.
This commit is contained in:
Jörg Sommer 2017-05-08 11:03:54 +02:00
parent 1383a3f62c
commit 84c3f80ab0
2 changed files with 17 additions and 12 deletions

View file

@ -104,22 +104,24 @@ int main(void)
vector_uint nums; vector_uint nums;
vector_init(&nums); vector_init(&nums);
for (uint* pn2 = prime_numbers; pn2 < prime_numbers_end; ++pn2) for (uint* pn4 = prime_numbers; pn4 < prime_numbers_end; ++pn4)
{ {
uint pow2 = *pn2 * *pn2; uint pow4 = *pn4 * *pn4;
pow4 *= pow4;
if (pow4 >= LIMIT)
break;
for (uint* pn3 = prime_numbers; pn3 < prime_numbers_end; ++pn3) for (uint* pn3 = prime_numbers; pn3 < prime_numbers_end; ++pn3)
{ {
uint sum = pow2 + *pn3 * *pn3 * *pn3; uint sum = pow4 + *pn3 * *pn3 * *pn3;
if (sum >= LIMIT) if (sum >= LIMIT)
break; break;
for (uint* pn4 = prime_numbers; pn4 < prime_numbers_end; ++pn4) for (uint* pn2 = prime_numbers; pn2 < prime_numbers_end; ++pn2)
{ {
uint pow4 = *pn4 * *pn4; uint pow2 = *pn2 * *pn2;
pow4 *= pow4;
uint sum2 = sum + pow4; uint sum2 = sum + pow2;
if (sum2 >= LIMIT) if (sum2 >= LIMIT)
break; break;

View file

@ -35,17 +35,20 @@ fn main() {
let mut nums = Vec::new(); let mut nums = Vec::new();
for pn2 in pn.iter() { for pn4 in pn.iter() {
let pow2 = pn2.pow(2); let pow4 = pn4.pow(4);
if pow4 >= LIMIT {
break;
}
for pn3 in pn.iter() { for pn3 in pn.iter() {
let sum = pow2 + pn3.pow(3); let sum = pow4 + pn3.pow(3);
if sum >= LIMIT { if sum >= LIMIT {
break; break;
} }
for pn4 in pn.iter() { for pn2 in pn.iter() {
let sum2 = sum + pn4.pow(4); let sum2 = sum + pn2.pow(2);
if sum2 >= LIMIT { if sum2 >= LIMIT {
break; break;
} }