素数又称质数。所谓素数是指除了 1 和它本身以外,不能被任何整数整除的数。
如果说这个数为n,那么从2 ~( n-1)之间,任取一个数和n进行“n%该数”操作都不能整除,那么说明这个数为素数。
#includeint main() { int num , m; printf("put in a prime : "); scanf("%d", &num); for( int i = 2; i < num ; i++) { if(num % i ==0) { m++; } } if(m == 0) { printf("%d is a prime",num); } else { printf("%d is not a prime",num); } return 0; }
那么,如果我们要解决两数之间的素数个数并且将其打印出来该怎么办呢?
例如,我们要解决求在1~200之间所有的素数,并输出其素数的个数。
#includeint main() { int num , i , j; // j用来记录素数的个数 for(num = 1; num < 200; num++) //遍历1~200 { for(i = 2; i < num; i++) { if(num % i == 0) //判断其不是个素数 { break; //跳出循环 } } if(i == num) // 遍历后,没有1和其本身以外的因数 { printf("%d ",num); j++; //素数的个数加1 } } printf("nTotal :%dnn",j); 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 Total :46
扩展
问题:输出a~b之间的所有素数,并统计其个数,再对其进行求和。
#includeint main() { int num , i , j ; int a , b; int sum = 0; printf("请输入所求区间:"); scanf("%d %d",&a , &b); if(a > b) { a = a ^ b; // 确保区间输入小的数在前,大的数在后 b = a ^ b; //可以采用第三方变量,也可以使用加减法交换,这里使用异或 a = a ^ b; } for(num = a; num < b; num++) { for(i = 2; i < num; i++) { if(num % i ==0) { break; } } if(num == i) { printf("%d ", num); sum += num; j++; } } printf("nTotal: %dnn", j); printf("sum = %dn",sum); return 0; }
结果展示:
请输入所求区间:1 10 2 3 5 7 Total: 4 sum = 17
使用函数表示求1~20之间的素数以及求其和
#includeint love( int n) { int i = 0, j = 0; for( i = 2; i < n; i++) { if(n % i == 0) { j++; return 0; } } if(j == 0 && n != 1) { return 1; } } int main () { int i = 0 , sum = 0 ; for( i = 1 ; i <= 20; i++) { if(love(i) == 1) { sum += i; printf("%d n",i); } } printf("%d n", sum); return 0; }
运行结果展示:
2 3 5 7 11 13 17 19 sum = 77



