user-0 提问: 输出100以内的素数

回复:
user: user-1
content: 如果是固定范围，可以用查表法。

user: user-2
content: 引用 9 楼 zhangxiangDavaid 的回复:算法有些问题……  for (int i = 3; i < 100; i += 2) 		if (prime(i) == 1) 			printf("%4d", i);

user: user-3
content: Finding prime numbers - Kenneth Haugland Different schemas for finding prime numbers explained with code http://www.codeproject.com/Articles/429694/Finding-prime-numbers

user: user-4
content: 引用 8 楼 my_live_123 的回复:[quote=引用 6 楼 zhangxiangDavaid 的回复:] [quote=引用 5 楼 my_live_123 的回复:] 楼上的代码还有优化的空间  int prime(int n)//-1 error； 0-noprime； 1 prime； {     int i = 7;     if(n <= 0)         return -1;     else if(n == 1 || n == 2 || n == 3 || n == 5)         return 1;     else if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0)         return 0;     else {         while(i < sqrt(n)) {             if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 2;             if(n % i == 0)                 return 0;             i+= 4;             if(n % i == 0)                 return 0;             i += 2;              if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 6;             if(n % i == 0)                 return 0;             i += 2;         }     }     return 1; }   你运行过吗？并且1还不是素数。  [/quote]   - else if(n == 1 || n == 2 || n == 3 || n == 5)  +else if(n == 1) +       return 0; + else if( n == 2 || n == 3 || n == 5) [/quote]  测试一下：  int prime(int n)//-1 error； 0-noprime； 1 prime； { 	int i = 7; 	if (n <= 0) 		return -1; 	else if (n == 1) 		return 0; 	else if(n == 2 || n == 3 || n == 5) 		return 1; 	else if (n % 2 == 0 || n % 3 == 0 || n % 5 == 0) 		return 0; 	else { 		while (i < sqrt(n)) { 			if (n % i == 0) 				return 0; 			i += 4; 			if (n % i == 0) 				return 0; 			i += 2; 			if (n % i == 0) 				return 0; 			i += 4; 			if (n % i == 0) 				return 0; 			i += 2; 			if (n % i == 0) 				return 0; 			i += 4; 			if (n % i == 0) 				return 0; 			i += 6; 			if (n % i == 0) 				return 0; 			i += 2; 		} 	} 	return 1; } int main(void) { 	for (int i = 0; i < 100; i++) 		if (prime(i) == 1) 			printf("%4d", i);  	return 0; } //2  3  5  73  95  算法有些问题……

user: user-2
content: 引用 6 楼 zhangxiangDavaid 的回复:[quote=引用 5 楼 my_live_123 的回复:] 楼上的代码还有优化的空间  int prime(int n)//-1 error； 0-noprime； 1 prime； {     int i = 7;     if(n <= 0)         return -1;     else if(n == 1 || n == 2 || n == 3 || n == 5)         return 1;     else if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0)         return 0;     else {         while(i < sqrt(n)) {             if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 2;             if(n % i == 0)                 return 0;             i+= 4;             if(n % i == 0)                 return 0;             i += 2;              if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 6;             if(n % i == 0)                 return 0;             i += 2;         }     }     return 1; }   你运行过吗？并且1还不是素数。  [/quote]   - else if(n == 1 || n == 2 || n == 3 || n == 5)  +else if(n == 1) +       return 0; + else if( n == 2 || n == 3 || n == 5)

user: user-5
content: 语法错误，有个math。h错了

user: user-4
content: 引用 5 楼 my_live_123 的回复:楼上的代码还有优化的空间  int prime(int n)//-1 error； 0-noprime； 1 prime； {     int i = 7;     if(n <= 0)         return -1;     else if(n == 1 || n == 2 || n == 3 || n == 5)         return 1;     else if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0)         return 0;     else {         while(i < sqrt(n)) {             if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 2;             if(n % i == 0)                 return 0;             i+= 4;             if(n % i == 0)                 return 0;             i += 2;              if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 6;             if(n % i == 0)                 return 0;             i += 2;         }     }     return 1; }   你运行过吗？并且1还不是素数。

user: user-2
content: 楼上的代码还有优化的空间  int prime(int n)//-1 error； 0-noprime； 1 prime； {     int i = 7;     if(n <= 0)         return -1;     else if(n == 1 || n == 2 || n == 3 || n == 5)         return 1;     else if(n % 2 == 0 || n % 3 == 0 || n % 5 == 0)         return 0;     else {         while(i < sqrt(n)) {             if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 2;             if(n % i == 0)                 return 0;             i+= 4;             if(n % i == 0)                 return 0;             i += 2;              if(n % i == 0)                 return 0;             i += 4;             if(n % i == 0)                 return 0;             i += 6;             if(n % i == 0)                 return 0;             i += 2;         }     }     return 1; }

user: user-4
content: 对于每一个i，这一步都会执行，不是吗？  if (j == i - 1) printf("%d ", a[i]);  所以遇到可以整除，就得跳出  for (j = 2; j <= i - 1; j++) { 	if (a[i] % j == 0) break;  //整除即跳出 	else 	{ 		if (j == i - 1) printf("%d ", a[i]); 	} }

user: user-4
content: 经供参考：  /* 输出前一百个素数 */ #include<stdio.h> #include<math.h> int main(void)//30 { 	int a[100], trail, i, j, count; 	count = 3; 	trail = 5; 	a[0] = 2; 	a[1] = 3; 	a[2] = 5; 	printf("%4d%4d%4d", 2, 3, 5); 	while (count < 100) 	{ 		trail += 2;   //素数一定是奇数，所以只考察奇数 		for (i = 0; i < count; i++) 		{ 			if (a[i] <= trail / 2 && trail % a[i] == 0) break; 		} 		if (i == count) printf("%4d", a[count++] = trail); 	} 	getchar(); 	return 0; } //   2   3   5   7  11  13  17  19  23  29  31  37  41  43  47  53  59   //  61  67  71  73  79  83  89  97 101 103 107 109 113 127 131 137 139 149  // 151 157 163 167 173 179 181 191 193 197 199 211 223 227 229 233 239 241  // 251 257 263 269 271 277 281 283 293 307 311 313 317 331 337 347 349 353  // 359 367 373 379 383 389 397 401 409 419 421 431 433 439 443 449 457 461  // 463 467 479 487 491 499 503 509 521 523 541

user: user-4
content: 仅供参考：  #include<stdio.h> #include<math.h> int main(void)//30 { 	int a[101], i, j; 	for (i = 0; i <= 98; i++) 	{ 		a[i] = i + 2; 		for (j = 2; j <= a[i] / 2; j++) 		{ 			if (a[i] % j == 0) break; 		} 		if (j > a[i] / 2) printf("%d ", a[i]); 	} 	getchar(); 	return 0; } //2 3 5 7 11 13 17 19 23 29 31 37 41 43 47 53 59 61 67 71 73 79 83 89 97

user: user-6
content: #include<stdio.h> #include<math.h>  int main(void) { 	int i, j, flag = 0;  	for (i = 2; i <= 100; i++) 	{ 		for (j = 2; j <= i - 1; j++) 		{ 			if (i%j == 0) 			{ 				flag = 1;	 			} 		} 		if(!flag) 		{ 			printf("%d ", i); 		} 		flag = 0; 	} 	putchar(10); 	return 0;  }