fork download
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <math.h>
  4.  
  5. int main() {
  6. char eratoTable[5793];
  7. int primeCount = 0;
  8. int primeList[46340] = {0};
  9. int i, j;
  10.  
  11. for (i = 0; i < 5793; eratoTable[i++] = 0);
  12.  
  13. for (i = 2; i < 5793; i++) {
  14. if ( (eratoTable[i / 8] >> (i % 8)) & 1) continue;
  15. for (j = i * 2; j < 46340; j += i) {
  16. eratoTable[j / 8] = eratoTable[j / 8] | (1 << (j % 8));
  17. }
  18. }
  19. for (i = 2; i < 46340; i++) {
  20. if ( !(eratoTable[i / 8] >> (i % 8) & 1) ) {
  21. primeList[primeCount++] = i;
  22. }
  23. }
  24. primeList[primeCount] = 0x7fffffff;
  25.  
  26. int input, sqrtInput;
  27. while (scanf("%d", &input) != EOF) {
  28. sqrtInput = (int)sqrt(input);
  29. for (i = 0; primeList[i] <= sqrtInput; i++) {
  30. if (input % primeList[i] == 0) {
  31. printf("非");
  32. break;
  33. }
  34. }
  35. printf("質數\n");
  36. }
  37.  
  38. return 0;
  39. }
  40.  
Success #stdin #stdout 0s 2360KB
stdin
2
3
4
5
6
7
8
9
10
2147483647
stdout
質數
質數
非質數
質數
非質數
質數
非質數
非質數
非質數
質數