Advertisement
Guest User

hejehje

a guest
Sep 21st, 2017
74
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.01 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[(int)sqrt(k)]; // 1. Skapar en n-element stor lista
  26. for(int i = 0; i <n;i++){ // och fyller den med 2,3,4.. till .. n i varje element
  27. arr[i]=(i+2);
  28. }
  29. /*Ex på steg här enligt Sieve of Eratosthenes:
  30. Här så 2 det minsta primtalet. sen tilldelas alla multipels med 2 med en nolla för
  31. att markeras som icke-primtal. nästa steg, en trea blir primtal och alla dess multipels
  32. tilldelas en nolla, 4 är redan markerad med noll, 5an blir primtal osv!
  33. */
  34. for(int k = 0; k<n;k++){
  35. if(arr[k]==0){
  36. continue;
  37. }else{
  38. int start = (int)arr[k];
  39. int l = (int)(start*2)-2;
  40. while(l<n){ // l står för index, det största index om max tal = 5 är 3
  41. arr[l]=0;
  42. l=l+start;
  43. }
  44. }
  45. }
  46. // Här printas alla primtal i arrayen
  47. for(int j = 0; j<n;j++){
  48. if(arr[j] != 0){
  49. print_number((int)arr[j]);
  50. }
  51. }
  52.  
  53. //här printas alla primtal under k och över arrayens primtal
  54. int boolMod = 0;
  55. for(int u = n+1; u<=k; u++){
  56. for(int y = 0; y<n; y++){
  57. if((int)arr[y] != 0 && u % (int)arr[y] == 0){ // om den någonsin går jämt ut med ett tal, breaka
  58. boolMod = 0;
  59. break;
  60. }else{
  61. boolMod = 1;
  62. }
  63. }
  64. if(boolMod==1){
  65. print_number(u);
  66. }
  67. }
  68.  
  69.  
  70. }
  71.  
  72.  
  73.  
  74. int main(int argc, char *argv[]){
  75. if(argc == 2)
  76. print_sieves(atoi(argv[1]));
  77. else
  78. printf("Please state an integer number.\n");
  79. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement