Advertisement
Guest User

HEAP

a guest
Sep 21st, 2017
65
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.04 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. //Author: Jacob Stachowicz, det är han som suttit och typat.
  6.  
  7.  
  8. void print_number(int);
  9.  
  10. #define COLUMNS 6
  11. int count_prints = 0; // en globalvariabel som räknar hur många ggr
  12. // void print_number utförts
  13. void print_number(int n){
  14.  
  15. if(count_prints % COLUMNS == 0){
  16. printf("\n"); // radbyte efter "COLUMNS" stycken prints
  17. }
  18. printf("%10d ", n);
  19. count_prints++;
  20. }
  21.  
  22. void print_sieves(int k){
  23. int n= sqrt(k);
  24. //tex 11 element om 12 för vi börjar på två
  25. char* arr;
  26. arr = (char *) malloc(n*sizeof(char));
  27. // 1. Skapar en n-element stor lista
  28. for(int i = 0; i <n;i++){ // och fyller den med 2,3,4.. till .. n i varje element
  29. arr[i]=i+2;
  30. }
  31. /*Ex på steg här enligt Sieve of Eratosthenes:
  32. Här så 2 det minsta primtalet. sen tilldelas alla multipels med 2 med en nolla för
  33. att markeras som icke-primtal. nästa steg, en trea blir primtal och alla dess multipels
  34. tilldelas en nolla, 4 är redan markerad med noll, 5an blir primtal osv!
  35. */
  36. for(int k = 0; k<n;k++){
  37. if(arr[k]==0){
  38. continue;
  39. }else{
  40. int start = (int)arr[k];
  41. int l = (int)(start*2)-2;
  42. while(l<n){ // l står för index, det största index om max tal = 5 är 3
  43. arr[l]=0;
  44. l=l+start;
  45. }
  46. }
  47. }
  48. // Här printas alla primtal i arrayen
  49. for(int j = 0; j<n;j++){
  50. if(arr[j] != 0){
  51. print_number(arr[j]);
  52. }
  53. }
  54.  
  55. //här printas alla primtal under k och över arrayens primtal
  56. int boolMod = 0;
  57. for(int u = n+1; u<=k; u++){
  58. for(int y = 0; y<n; y++){
  59. if((int)arr[y] != 0 && u % (int)arr[y] == 0){ // om den någonsin går jämt ut med ett tal, breaka
  60. boolMod = 0;
  61. break;
  62. }else{
  63. boolMod = 1;
  64. }
  65. }
  66. if(boolMod==1){
  67. print_number(u);
  68. }
  69. }
  70.  
  71. free(arr);
  72. }
  73.  
  74.  
  75.  
  76. int main(int argc, char *argv[]){
  77. if(argc == 2)
  78. print_sieves(atoi(argv[1]));
  79. else
  80. printf("Please state an integer number.\n");
  81. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement