Fix prime calculator; more threads by default
This commit is contained in:
		
							parent
							
								
									71138258e6
								
							
						
					
					
						commit
						099012a60b
					
				
							
								
								
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										3
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							@ -1,3 +1,6 @@
 | 
				
			|||||||
/target
 | 
					/target
 | 
				
			||||||
report.json
 | 
					report.json
 | 
				
			||||||
primes.json
 | 
					primes.json
 | 
				
			||||||
 | 
					primes1.json
 | 
				
			||||||
 | 
					primes1.txt
 | 
				
			||||||
 | 
					primes1.zip
 | 
				
			||||||
 | 
				
			|||||||
@ -17,6 +17,7 @@ lto = true          # Enable link-time optimization
 | 
				
			|||||||
codegen-units = 1       # Reduce number of codegen units to increase optimizations
 | 
					codegen-units = 1       # Reduce number of codegen units to increase optimizations
 | 
				
			||||||
panic = 'abort'         # Abort on panic
 | 
					panic = 'abort'         # Abort on panic
 | 
				
			||||||
strip = true            # Strip symbols from binary; remove pdb
 | 
					strip = true            # Strip symbols from binary; remove pdb
 | 
				
			||||||
 | 
					overflow-checks = false
 | 
				
			||||||
 | 
					
 | 
				
			||||||
[profile.dev]
 | 
					[profile.dev]
 | 
				
			||||||
opt-level = 3
 | 
					opt-level = 3
 | 
				
			||||||
							
								
								
									
										24
									
								
								check_primes.js
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										24
									
								
								check_primes.js
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,24 @@
 | 
				
			|||||||
 | 
					const assert = require("assert");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					const primes_generated = require("./primes.json");
 | 
				
			||||||
 | 
					const correct_primes = require("./primes1.json");
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					assert(
 | 
				
			||||||
 | 
					  primes_generated.length == correct_primes.length,
 | 
				
			||||||
 | 
					  "Number of primes generated is not equal to the number of correct primes",
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					for (let i = 0; i < primes_generated.length; i++) {
 | 
				
			||||||
 | 
					  if (primes_generated[i] !== correct_primes[i]) {
 | 
				
			||||||
 | 
					    console.error(
 | 
				
			||||||
 | 
					      `Incorrect prime at index ${i}: ${primes_generated[i]} | ${correct_primes[i]}`,
 | 
				
			||||||
 | 
					    );
 | 
				
			||||||
 | 
					    process.exit(1);
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					console.log("All primes are correct");
 | 
				
			||||||
 | 
					console.log(
 | 
				
			||||||
 | 
					  "Last prime in generated primes: ",
 | 
				
			||||||
 | 
					  primes_generated[primes_generated.length - 1],
 | 
				
			||||||
 | 
					);
 | 
				
			||||||
							
								
								
									
										28
									
								
								convert_primelist.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								convert_primelist.py
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,28 @@
 | 
				
			|||||||
 | 
					import json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					def convert_primes_to_json(file_path):
 | 
				
			||||||
 | 
					    # Step 1: Read the file content
 | 
				
			||||||
 | 
					    with open(file_path, 'r') as file:
 | 
				
			||||||
 | 
					        lines = file.readlines()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    primes = []
 | 
				
			||||||
 | 
					    for line in lines:
 | 
				
			||||||
 | 
					        # Step 2: Extract prime numbers
 | 
				
			||||||
 | 
					        # Split each line into words and filter out non-numeric entries
 | 
				
			||||||
 | 
					        numbers = [int(num) for num in line.split() if num.isdigit()]
 | 
				
			||||||
 | 
					        primes.extend(numbers)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    # Step 3: Convert the list of primes to a JSON array
 | 
				
			||||||
 | 
					    primes_json = json.dumps(primes, indent=4)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    return primes_json
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# Example usage:
 | 
				
			||||||
 | 
					file_path = 'primes1.txt'
 | 
				
			||||||
 | 
					primes_json = convert_primes_to_json(file_path)
 | 
				
			||||||
 | 
					print(primes_json)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					# If you want to save the JSON array to a file:
 | 
				
			||||||
 | 
					output_path = 'primes1.json'
 | 
				
			||||||
 | 
					with open(output_path, 'w') as output_file:
 | 
				
			||||||
 | 
					    output_file.write(primes_json)
 | 
				
			||||||
@ -17,7 +17,12 @@ pub mod prime_utils {
 | 
				
			|||||||
            return true;
 | 
					            return true;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        if number.sqrt().pow(2) == *number {
 | 
					        let sqrtnum = number.sqrt();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if sqrtnum.pow(2) == *number {
 | 
				
			||||||
 | 
					            if number == &BigUint::from(23u8) {
 | 
				
			||||||
 | 
					                eprintln!("SQRT check failed");
 | 
				
			||||||
 | 
					            }
 | 
				
			||||||
            return false;
 | 
					            return false;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -31,21 +36,23 @@ pub mod prime_utils {
 | 
				
			|||||||
            let one = BigUint::one();
 | 
					            let one = BigUint::one();
 | 
				
			||||||
            let zero = BigUint::zero();
 | 
					            let zero = BigUint::zero();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            let sqrtnum = number.sqrt() + &one; //fake ceil function
 | 
					            let sqrtnum = sqrtnum + &one; //fake ceil function
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            for prime in g_primes {
 | 
					            for prime in g_primes {
 | 
				
			||||||
                if prime < &sqrtnum && number % prime == zero {
 | 
					                if prime < &sqrtnum && number % prime == zero {
 | 
				
			||||||
 | 
					                    if number == &BigUint::from(23u8) {
 | 
				
			||||||
 | 
					                        eprintln!("Prime table check failed");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
            }
 | 
					            }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
            if !is_probably_prime(number, 5) {
 | 
					 | 
				
			||||||
                return false;
 | 
					 | 
				
			||||||
            }
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
            loop {
 | 
					            loop {
 | 
				
			||||||
                i += &one;
 | 
					                i += &one;
 | 
				
			||||||
                if number % &i == zero {
 | 
					                if number % &i == zero {
 | 
				
			||||||
 | 
					                    if number == &BigUint::from(23u8) {
 | 
				
			||||||
 | 
					                        eprintln!("manual check failed");
 | 
				
			||||||
 | 
					                    }
 | 
				
			||||||
                    return false;
 | 
					                    return false;
 | 
				
			||||||
                }
 | 
					                }
 | 
				
			||||||
                if i == sqrtnum {
 | 
					                if i == sqrtnum {
 | 
				
			||||||
@ -61,6 +68,12 @@ pub mod prime_utils {
 | 
				
			|||||||
            last = (last.pow(2) - &two) % number;
 | 
					            last = (last.pow(2) - &two) % number;
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        last == BigUint::from(0u8)
 | 
					        let ret = last == BigUint::from(0u8);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        if number == &BigUint::from(23u8) && !ret {
 | 
				
			||||||
 | 
					            eprintln!("RET check failed");
 | 
				
			||||||
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        ret
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
				
			|||||||
@ -65,8 +65,8 @@ fn main() {
 | 
				
			|||||||
    const N: i64 = 1_000_000;
 | 
					    const N: i64 = 1_000_000;
 | 
				
			||||||
    const NF: f64 = N as f64;
 | 
					    const NF: f64 = N as f64;
 | 
				
			||||||
    const NU: usize = N as usize;
 | 
					    const NU: usize = N as usize;
 | 
				
			||||||
    const THREADS: usize = 12;
 | 
					    const THREADS: usize = 30;
 | 
				
			||||||
    const SPLITTER: u64 = N as u64 / 10;
 | 
					    const SPLITTER: u64 = N as u64 / THREADS as u64;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    try_set_thread_priority();
 | 
					    try_set_thread_priority();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user