Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <stdlib.h>
- #include <math.h>
- //Author: Jacob Stachowicz, det är han som suttit och typat.
- void print_number(int);
- #define COLUMNS 6
- int count_prints = 0; // en globalvariabel som räknar hur många ggr
- // void print_number utförts
- void print_number(int n){
- if(count_prints % COLUMNS == 0){
- printf("\n"); // radbyte efter "COLUMNS" stycken prints
- }
- printf("%10d ", n);
- count_prints++;
- }
- void print_sieves(int k){
- int n= sqrt(k);
- //tex 11 element om 12 för vi börjar på två
- char* arr;
- arr = (char *) malloc(n*sizeof(char));
- // 1. Skapar en n-element stor lista
- for(int i = 0; i <n;i++){ // och fyller den med 2,3,4.. till .. n i varje element
- arr[i]=i+2;
- }
- /*Ex på steg här enligt Sieve of Eratosthenes:
- Här så 2 det minsta primtalet. sen tilldelas alla multipels med 2 med en nolla för
- att markeras som icke-primtal. nästa steg, en trea blir primtal och alla dess multipels
- tilldelas en nolla, 4 är redan markerad med noll, 5an blir primtal osv!
- */
- for(int k = 0; k<n;k++){
- if(arr[k]==0){
- continue;
- }else{
- int start = (int)arr[k];
- int l = (int)(start*2)-2;
- while(l<n){ // l står för index, det största index om max tal = 5 är 3
- arr[l]=0;
- l=l+start;
- }
- }
- }
- // Här printas alla primtal i arrayen
- for(int j = 0; j<n;j++){
- if(arr[j] != 0){
- print_number(arr[j]);
- }
- }
- //här printas alla primtal under k och över arrayens primtal
- int boolMod = 0;
- for(int u = n+1; u<=k; u++){
- for(int y = 0; y<n; y++){
- if((int)arr[y] != 0 && u % (int)arr[y] == 0){ // om den någonsin går jämt ut med ett tal, breaka
- boolMod = 0;
- break;
- }else{
- boolMod = 1;
- }
- }
- if(boolMod==1){
- print_number(u);
- }
- }
- free(arr);
- }
- int main(int argc, char *argv[]){
- if(argc == 2)
- print_sieves(atoi(argv[1]));
- else
- printf("Please state an integer number.\n");
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement