user-0 提问: 纯新手求教

回复:
user: user-1
content: 引用 5 楼 weixin_44770095 的回复:[quote=引用 4 楼 儿童节的回复:][quote=引用 3 楼 儿童节 的回复:]  正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。[/quote] 但是如果只搜索小于x的质数并且直接存储到数组里的话不是更快吗，比如说91就只要检查3 5 7就可以跳出了，不用34567[/quote]  这就不清楚了，数学不好，不懂你说的是什么依据。实际上，我前几天练习的时候，只想到了被除数是每个数的一半+1，今天看了你发的平方根，试了一下也可以，才知道可以把被除数的上限定为 平方根+1。 数学理论方面的东西，一下子记不得那么多了。

user: user-0
content: 引用 4 楼 儿童节的回复:[quote=引用 3 楼 儿童节 的回复:]  正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。[/quote] 但是如果只搜索小于x的质数并且直接存储到数组里的话不是更快吗，比如说91就只要检查3 5 7就可以跳出了，不用34567

user: user-1
content: 引用 3 楼 儿童节 的回复:正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。  点了提交回复才发现缺了一个数字3，抱歉！  把                  int k = sqrt(i);   改成                  int k = sqrt(i) + 1 ;   就好了。

user: user-1
content: 正好前几天练习过，如下：   //  求给定范围内的质数（素数） //  定义：在大于1的自然数中，除了1和它本身以外不再有其他因数，这样的数叫质数或素数。  #include <stdio.h> #include <math.h>  int main() {         int i, n, m = 1;         printf("%8d", 2);  // 2 就不用去比较了。         //  从 3 开始，偶数也不用比较，只比较奇数         for (i = 3; i <= 999; i = i + 2)         {                 int k = sqrt(i);                 for (n = 2; n <= k; n++)                 {                         if (i % n == 0)  //  如果数字除以那些被除数，余数为0则表示能被整除，即有因数，于是跳过                                 break;                         else if (n == k) // 要把从2到k的数都除以一遍才能确定是不是质数（素数）                         {                                 printf("%8d", i);                                 m++;                                 if (0 == m % 10) //  每输出10个数字，换一行                                         printf("\n");                         }                 }         }         printf("\n");          return 0; }   运行截图：    希望能帮到你。

user: user-0
content: 我的意思是只搜索全部小于x的平方根的质数，这样可以减少循环次数

user: user-2
content: for (int i=2;i<=1000;i++) 	{ 		if (i == 2) 		{ 			cout << i << endl; 		} 		for (int j = 2;j<i;j++) 		{ 			if (i%j == 0) 			{ 				break; 			} 			if (j == i -1) 			{ 				cout << i << endl; 			} 		} 	}  不太懂要怎么修改,但是我的思路是: 2,本身是质数,直接取. 大于2的,设立一个循环,在循环中能够被小于自己,大于1的数整数(也就是取余为0的),直接跳出循环. 没跳出循环的,就是质数. 设立j的数值判断一下是否到循环尾部了,输出即可.  当然也可以在for(j)的循环里把j<=i 然后把输出的判断改一下.