solve 07
This commit is contained in:
@@ -1,10 +1,10 @@
|
||||
#![allow(dead_code)]
|
||||
|
||||
use lazy_static::lazy_static;
|
||||
use lib::submit;
|
||||
use std::fs::File;
|
||||
use std::io::{BufRead, BufReader};
|
||||
use std::str::FromStr;
|
||||
use lazy_static::lazy_static;
|
||||
use lib::compute_async;
|
||||
|
||||
lazy_static!(
|
||||
static ref DATA: Vec<u64> = {
|
||||
@@ -19,54 +19,41 @@ lazy_static!(
|
||||
};
|
||||
);
|
||||
|
||||
const FG_DATA_EVEN: &[u64] = &[
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 18446744073709551615,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 0, 0,
|
||||
0, 0, 131072, 18446744073709551615,
|
||||
];
|
||||
|
||||
const FG_DATA_ODD: &[u64] = &[131072, 18446744073709551615];
|
||||
|
||||
const N: u64 = 10000117800000000;
|
||||
const X: u64 = 5905739161907566595;
|
||||
const N: u64 = 979607657800000055;
|
||||
const X: u64 = 10962444957429324784;
|
||||
|
||||
fn main() {
|
||||
compute_async(|tx| {
|
||||
let mut n = N;
|
||||
let mut x = X;
|
||||
|
||||
loop {
|
||||
n += 1;
|
||||
x = sub(f(x), n);
|
||||
|
||||
fn foo(n: u64, mut x: u64, k: u64) -> (u64, u64) {
|
||||
for i in 1..=k {
|
||||
x = sub(fg(x), n + i);
|
||||
}
|
||||
(n + k, x)
|
||||
}
|
||||
|
||||
(n, x) = foo(n, x, 1_000_000);
|
||||
|
||||
|
||||
x = g(x);
|
||||
|
||||
tx.send((n, x)).unwrap();
|
||||
fn sum(n: u64, k: u64) -> u64 {
|
||||
let mut sum = 0u64;
|
||||
for i in 1..=k {
|
||||
sum = add(sum, fg_n(n + i, k - i));
|
||||
}
|
||||
});
|
||||
sum
|
||||
}
|
||||
|
||||
fn fast_sum(n: u64, k: u64) -> u64 {
|
||||
debug_assert!(k % 192 == 0);
|
||||
let mut result = sum(n, 0);
|
||||
result = add(result, ((13556435138434861179u128 * (k / 192) as u128) % (u64::MAX as u128)) as u64);
|
||||
result
|
||||
}
|
||||
|
||||
let mut n = N;
|
||||
let mut x = X;
|
||||
|
||||
n += 1;
|
||||
x = sub(f(x), n);
|
||||
|
||||
let k = (1_000_000_000_000_000_000u64 - n) / 192 * 192;
|
||||
let sum = fast_sum(n , k);
|
||||
x = sub(fg_n(x, k), sum);
|
||||
n += k;
|
||||
|
||||
x = g(x);
|
||||
|
||||
submit(n, x).unwrap();
|
||||
println!("n = {n}");
|
||||
println!("x = {x}");
|
||||
}
|
||||
|
||||
fn f(x: u64) -> u64 {
|
||||
@@ -95,7 +82,7 @@ fn fg(x: u64) -> u64 {
|
||||
}
|
||||
|
||||
fn fg_n(mut x: u64, n: u64) -> u64 {
|
||||
for _ in 0..n {
|
||||
for _ in 0..n%64 {
|
||||
x = fg(x);
|
||||
}
|
||||
x
|
||||
|
Reference in New Issue
Block a user