- 论坛徽章:
- 36
|
本帖最后由 cokeboL 于 2012-09-07 15:53 编辑
楼主给的答案明显是错误代码,我写了个不用查表的:- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
- #include <unistd.h>
- #include <math.h>
- char is_prime(int n)
- {
- int i=2;
- if(2 == n)
- return 1;
- while(i < sqrt(n)){
- if(!(n % i))
- return 0;
- i++;
- }
- return 1;
- }
- void find_prime(int max)
- {
- int i, j, tmp;
- char *p = (char*)calloc(max, 1);
- p[0] = -1;
- for(i = 2; i <= max; i++){
- if(-1 == p[i-1]){
- continue;
- }
- if(is_prime(i)){
- for(j = 2; (tmp = i * j) <= max; j++){
- p[tmp-1] = -1;
- }
- }
- }
- j = 0;
- for(i = 2; i <= max; i++){
- if(p[i-1] != -1){
- printf("%10d%c", i, (0==(++j%10))?'\n':' ');
- }
- }
- printf("\n");
- free(p);
- }
- int main(int argc, char *argv[])
- {
- find_prime(atoi(argv[1]));
- return 0;
- }
复制代码 |
|