目录
输入M、N,1 < M < N < 1000000,求区间[M,N]内的所有素数的个数。素数定义:除了1以外,只能被1和自己整除的自然数称为素数
两个整数M,N
区间内素数的个数
输入:
2 10
复制输出:
4
若n为素数,则 2~sqrt(n)之间所有数字一定不会被n整除。
- #include <math.h>
- #include <stdio.h>
-
- int main() {
-
- int a = 0, b = 0;
-
- scanf("%d %d", &a, &b);
- getchar();
-
- int count = 0;
-
- for (int i = a; i <= b; i++)
- {
- int k = 0;
-
- int flag = 0;
-
- for (k = 2; k <= (int)sqrt(i) ;k++)
- {
- if(i % k == 0) //如果能整除,说明不是素数
- {
- flag = 1;
- break;
- }
-
- }
-
- if (flag == 0)
- count++;
-
- }
-
- printf("%d\n", count);
-
- return 0;
- }
- for (int i = a; i <= b; i++)
- {
- int k = 0;
-
- int flag = 0;
-
- for (k = 2; k <= (int)sqrt(i) ;k++)
- {
- if(i % k == 0) //如果能整除,说明不是素数
- {
- flag = 1;
- break;
- }
-
- }
-
- if (flag == 0)
- count++;
-
- }
1.默认为素数,
当flag == 1,则不为素数。
2.
double sqrt (double x);
最好将数据类型强制转化为 int
3.为了追求时间复杂度,没必要将 2~n所有数据都试除,只需要将 2~sqrt(n)的所有数据试除就好。
flag需要封装在循环内部