Created
October 26, 2014 09:33
-
-
Save Happsson/39322ac88e54dcd7c943 to your computer and use it in GitHub Desktop.
Prime-hittare
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| package math; | |
| import java.util.ArrayList; | |
| /** | |
| * Hittar primtal. | |
| * Kollar bara ojämna tal, jämför genom att kolla om talet som ska undersökas är delbart med tidigare hittade primtal. | |
| * Om ja är det inte ett primtal. Om nej måste det vara det. | |
| * Kollar också om talets komponenter summeras till 3, om så kan det inte vara ett primtal. | |
| * Kollar bara tal som inte slutar på 5. | |
| * Kollar bara delbarhet mot primtal som är mindre än roten ur det tal vi vill undersöka. | |
| * | |
| * @author hannespa | |
| * | |
| */ | |
| public class Upg6 { | |
| public final static int PRIMES_TO_CALCULATE = 100000; | |
| public static void main(String[] args){ | |
| ArrayList<Integer> primes = new ArrayList<Integer>(); | |
| primes.add(3); | |
| primes.add(5); | |
| int nextCheck = 5; | |
| long timeCheck = System.currentTimeMillis(); | |
| while(primes.size()<PRIMES_TO_CALCULATE-1){ | |
| nextCheck=nextCheck+2; | |
| if(quickChecks(nextCheck) && nextCheck%10!=5){ | |
| boolean wasPrime = true; | |
| checkloop: | |
| for(int i = 0; i < Math.round(Math.sqrt(nextCheck))-1; i++){ | |
| if(nextCheck%primes.get(i)==0){ | |
| wasPrime = false; | |
| break checkloop; | |
| } | |
| } | |
| if(wasPrime) primes.add(nextCheck); | |
| } | |
| } | |
| System.out.println("Took me 'bout " + (System.currentTimeMillis()-timeCheck)/1000f + | |
| " seconds to find " + (primes.size()+1)+ " primes. " + | |
| "Last prime was " + primes.get(primes.size()-1)); | |
| } | |
| /** | |
| * Kollar om talets delar adderas till 3. | |
| * Kallar på sig själv vid behov. | |
| * | |
| * @param nextCheckG talet som ska kollas | |
| * @return huruvida dess komponenter INTE adderas till 3. | |
| */ | |
| private static boolean quickChecks(int nextCheckG) { | |
| String str = String.valueOf(nextCheckG); | |
| int added = 0; | |
| for(int i = 0; i < str.length(); i++){ | |
| int add = str.charAt(i)-48; | |
| added = added + add; | |
| } | |
| if(added>10) return quickChecks(added); | |
| if(added == 3){ | |
| return false; | |
| }else{ | |
| return true; | |
| } | |
| } | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment