Guest User

Untitled

a guest
Dec 12th, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.08 KB | None | 0 0
  1. extern crate primal;
  2. extern crate bmp;
  3. extern crate num;
  4. extern crate num_bigint;
  5.  
  6. use std::io;
  7. use std::io::Write;
  8. use std::fs::File;
  9. use std::ops::Index;
  10. use std::fmt::Error;
  11. use std::num::ParseIntError;
  12. use std::collections::{HashMap, LinkedList};
  13.  
  14. use primal::*;
  15. use num::{Integer, BigInt};
  16. use num_bigint::Sign;
  17. use bmp::Pixel;
  18.  
  19. static RSA100C: &'static str = "1522605027922533360535618378132637429718068114961380688657908494580122963258952897654000350692006139";
  20. static RSA100C_N: &'static str = "14387588531011964456730684619177102985211280936";
  21. static RSA100A: &'static str = "37975227936943673922808872755445627854565536638199";
  22. static RSA100B: &'static str = "40094690950920881030683735292761468389214899724061";
  23. static RSA100D: &'static str = "39020571855401265512289573339484371018905006900194";
  24. static RSA100E: &'static str = "61218444075812733697456051513875809617598014768503";
  25. static RSA100F: &'static str = "16822699634989797327123095165092932420211999031886";//2d+1-e
  26. static RSA100N: &'static str = "14387588531011964456730684619177102985211280936";
  27. static RSA100X: &'static str = "1045343918457591589480700584038743164339470261995";
  28. static RSA100X_PLUS_N: &'static str = "1059731506988603553937431268657920267324681542931";
  29.  
  30. pub trait BmpColor {
  31. fn color(e: i32, n: i32, f: i32, img: &mut bmp::Image, pixel: Pixel);
  32. }
  33.  
  34. impl BmpColor for TheEnd {
  35. fn color(e: i32, n: i32, f: i32, img: &mut bmp::Image, pixel: Pixel) {
  36. img.set_pixel((e + 1024) as u32, n as u32, pixel);
  37. img.set_pixel((f + 1024) as u32, (n - 1) as u32, pixel);
  38. }
  39. }
  40. #[derive(Debug)]
  41. pub struct TheEnd(pub HashMap<i32, HashMap<i32, LinkedList<String>>>);
  42.  
  43. impl TheEnd {
  44. pub fn new() -> TheEnd {
  45. TheEnd(HashMap::new())
  46. }
  47. pub fn create_the_end(&mut self) {
  48. let i_max: i32 = 512;
  49. let x_min: i32 = 0;
  50. let y_min: i32 = 0;
  51. let x_max: i32 = 64;
  52. let y_max: i32 = 64;
  53. let mut img = bmp::Image::new(2048, 512);
  54. let mut color = Pixel { r:255, g:000, b:000 };
  55. let red = Pixel { r:255, g:000, b:000 };
  56. let blue = Pixel { r:000, g:000, b:255 };
  57. let green = Pixel { r:000, g:255, b:000 };
  58. let white = Pixel { r:255, g:255, b: 255 };
  59. let black = Pixel { r: 000, g: 000, b: 000 };
  60. let orange = Pixel { r:255, g: 165, b: 000 };
  61. let purple = Pixel { r:255, g: 000, b: 255 };
  62. let yellow = Pixel { r:255, g: 255, b: 000 };
  63. let mut colors: Vec<Pixel> = Vec::new();
  64. colors.push(red);
  65. colors.push(green);
  66. colors.push(blue);
  67. colors.push(orange);
  68. colors.push(yellow);
  69. colors.push(purple);
  70. for i in 1 .. i_max {
  71. for j in 1 .. i {
  72. let a: i32 = i - j;
  73. let b: i32 = i + j;
  74. let c: i32 = a * b;
  75. let odd = c % 2 == 1;
  76. let d = (c as f64).sqrt() as i32;
  77. let e = c - (d * d) + 1;
  78. let f = e - ((2 * d) + 1);
  79. let n = i - d;
  80. let x = d - a;
  81. let mut primes: Vec<i32> = [3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911].to_vec();
  82. let base = a + b/ a;
  83. for (color, prime) in colors.iter().cycle().zip(primes) {
  84. if x % prime == base {
  85. TheEnd::color(e,n,f,&mut img, *color);
  86. }
  87. }
  88. if c == 1 {
  89. TheEnd::color(e,n,f,&mut img, white);
  90. }
  91. if e == 1 {
  92. TheEnd::color(e,n,f,&mut img, white);
  93. }
  94. if a % base == 1 {
  95. TheEnd::color(e,n,f,&mut img, blue);
  96. }
  97. if primal::is_prime(c as u64) {
  98. TheEnd::color(e,n,f,&mut img, white);
  99. }
  100.  
  101. let text = format!("{{{}:{}:{}:{}:{}:{}}}", e, n, d, x, a, b);
  102. self.0
  103. .entry(e)
  104. .or_insert(HashMap::new())
  105. .entry(n)
  106. .or_insert(LinkedList::new())
  107. .push_back(text);
  108. let text = format!("{{{}:{}:{}:{}:{}:{}}}", f, n - 1, d + 1, x + 1, a, b);
  109. self.0
  110. .entry(f)
  111. .or_insert(HashMap::new())
  112. .entry(n - 1)
  113. .or_insert(LinkedList::new())
  114. .push_back(text);
  115. }
  116. }
  117. let _ = img.save("img.bmp");
  118. }
  119. pub fn output<W: Write>(&self, target: &mut W) -> io::Result<()> {
  120. let i_max = 256;
  121. let x_min = -64;
  122. let y_min = 0;
  123. let x_max = 64;
  124. let y_max = 64;
  125. let set_s = 12;
  126.  
  127. for y in 0 .. y_max {
  128. for z in 0 .. set_s {
  129. for x in x_min .. x_max {
  130. match self.0.get(&x).and_then(|e| e.get(&y)).and_then(|e| e.iter().nth(z as usize)) {
  131. Some(x) => write!(target, "{},", x)?,
  132. None => write!(target, ",")?,
  133. }
  134. }
  135. write!(target, "\n")?
  136. }
  137. }
  138. Ok(())
  139. }
  140. }
  141.  
  142. #[derive(Debug)]
  143. pub struct TheEndRecord {
  144. // column and remainder
  145. e: i32,
  146. // row and midpoint
  147. n: i32,
  148. d: i32,
  149. x: i32,
  150. a: i32,
  151. b: i32,
  152. c: Option<i32>,
  153. }
  154.  
  155. impl TheEndRecord {
  156. fn new() -> TheEndRecord {
  157. TheEndRecord { e: 0, n: 0, d: 0, x: 0, a: 0, b: 0, c: None }
  158. }
  159. }
  160. pub trait Solver {
  161. fn generate_ter(c: i32, n: i32) -> Self;
  162. fn solve_na(x: i32, e: i32) -> i32;
  163. fn solve_n(x: i32, e: i32, a: i32) -> i32;
  164. fn solve_ed(c: i32) -> (i32, i32);
  165. fn solve_f(e: i32, d: i32) -> i32;
  166. fn solve_x(d: i32, n: i32, c: i32) -> i32;
  167. fn solve_a(d: i32, x: i32) -> i32;
  168. fn solve_b(c: i32, a: i32) -> i32;
  169. fn solve_c(&mut self);
  170. }
  171.  
  172. impl Solver for TheEndRecord {
  173. fn generate_ter(c: i32, n: i32) -> Self {
  174. let mut ter = TheEndRecord::new();
  175. let ed = TheEndRecord::solve_ed(c);
  176. let f = TheEndRecord::solve_f(ed.0, ed.1);
  177. let x = TheEndRecord::solve_x(ed.1, n, c);
  178. let a = TheEndRecord::solve_a(ed.1, x);
  179. let b = TheEndRecord::solve_b(c, a);
  180. ter.e = ed.0;
  181. ter.n = n;
  182. ter.d = ed.1;
  183. ter.x = x;
  184. ter.a = a;
  185. ter.b = b;
  186. ter.c = Some(c);
  187. ter
  188. }
  189. fn solve_na(x: i32, e: i32) -> i32 {
  190. (x^2 + e)/2
  191. }
  192. fn solve_n(x: i32, e: i32, a: i32) -> i32 {
  193. ((x * x) + e )/ (2 * a)
  194. }
  195. // returns (e,d)
  196. fn solve_ed(c: i32) -> (i32, i32) {
  197. let c = (c as f64).sqrt();
  198. let rem = (c as f64).sqrt() % 1.0;
  199. (c as i32, rem as i32)
  200. }
  201. fn solve_f(e: i32, d: i32) -> i32 {
  202. e - ((2 * d) + 1).abs()
  203. }
  204. fn solve_x(d: i32, n: i32, c: i32) -> i32 {
  205. ((((d + n) * (d + n) - c) - n) as f64).sqrt() as i32
  206. }
  207. fn solve_a(d: i32, x: i32) -> i32 {
  208. d - x
  209. }
  210. fn solve_b(c: i32, a: i32) -> i32 {
  211. c / a
  212. }
  213. fn solve_c(&mut self) {
  214. let c = self.a * self.b;
  215. self.c = Some(c);
  216. }
  217. }
  218. pub trait Maps {
  219. fn prime_map(vec: Vec<TheEndRecord>) -> HashMap<i32, HashMap<i32, LinkedList<TheEndRecord>>>;
  220. }
  221. impl Maps for TheEndRecord {
  222. fn prime_map(vec: Vec<TheEndRecord>) -> HashMap<i32, HashMap<i32, LinkedList<TheEndRecord>>> {
  223. let mut hashmap: HashMap<i32, HashMap<i32, LinkedList<TheEndRecord>>> = HashMap::new();
  224. for ter in vec {
  225. let c = ter.c.unwrap();
  226. if primal::is_prime(c as u64) {
  227. hashmap.entry(c as i32)
  228. .or_insert(HashMap::new())
  229. .entry(c)
  230. .or_insert(LinkedList::new())
  231. .push_back(ter);
  232. }
  233. }
  234. hashmap
  235. }
  236. }
  237. fn main() {
  238. let mut the_end = TheEnd::new();
  239. the_end.create_the_end();
  240.  
  241. // let mut buffer = File::create("./output.csv").unwrap();
  242. // the_end.output(&mut buffer).unwrap();
  243. let five: f64 = 5.0;
  244. let sqrt = five.sqrt();
  245. let gr = (1.0 + sqrt) / 2.0;
  246. let recip = 1.0 / gr;
  247. println!("{:?}", gr);
  248. println!("{:?}", recip);
  249. let mut ter_vec: Vec<TheEndRecord> = Vec::<TheEndRecord>::new();
  250. for x in -64 .. 64 {
  251. for y in -64 .. 64 {
  252. the_end.0.get(&x).unwrap().get(&y).map(|e| {
  253. for entry in e {
  254. let vec: Vec<&str> = entry.split(|c| c == '{' || c == ':' || c == '}').collect();
  255. let mut ter = TheEndRecord {
  256. e: vec.index(1).parse().unwrap(),
  257. n: vec.index(2).parse().unwrap(),
  258. d: vec.index(3).parse().unwrap(),
  259. x: vec.index(4).parse().unwrap(),
  260. a: vec.index(5).parse().unwrap(),
  261. b: vec.index(6).parse().unwrap(),
  262. c: None,
  263. };
  264.  
  265. ter.solve_c();
  266. ter_vec.push(ter);
  267. }
  268. });
  269. }
  270. }
  271.  
  272.  
  273. let prime_map = TheEndRecord::prime_map(ter_vec);
  274. for entries in prime_map {
  275. println!("{:?}", entries.0);
  276. }
  277. }
  278.  
  279. // 2an = xx + e
  280. // n = xx + e / 2a
Add Comment
Please, Sign In to add comment