文章

40

粉丝

607

获赞

68

访问

401.8k

头像
1701非素数个数(考试前要复习筛查法)
P1701 厦门大学2017年机试题
发布于2020年4月12日 21:51
阅读数 13.2k

#include<iostream>

using namespace std;

bool  a[10000001] = { true };

void Prime(long long end) {
	for (long long  i = 2; i <= end; i++) {
		a[i] = true;
	}
	for (long long  i = 1; i * i <= end; i++) {
		if (a[i]) {//素数的倍数全部不是素数置false
			for (long long  j = i * i; j <= end; j += i) {
				a[j] = false;
			}
		}
	}
}

int main() {
	long long start, end;
	while (cin >> start >> end) {
		long long  sum = 0;
		Prime(end);
		for (long long  i = start;i <= end;i++) {
			if (!a[i]) {
				sum++;
			}
		}
		if (start == 1) {
			cout << sum - 1 << endl;
		}
		else {
			cout << sum << endl;
		}
	}
	return 0;
}

朴素筛查(埃氏筛查法):

首先把2-n的数按顺序写出(例子为n=16):

2    3    4    5    6    7    8    9    10    11    12    13    14    15    16

从前往后看,找到第一个未被划掉的数,(这里是2)说...

登录查看完整内容


登录后发布评论

3 条评论
admin SVIP
2020年4月13日 14:27

写的很详细,赞一个yes

赞(0)

莫小七 : 回复 admin: 那天偷偷摸摸做题的时候我就知道不会有好下场,我这炸的很明显啊!

2020年4月13日 17:07

admin : 回复 admin: 哈哈,不用担心,下次分就上来了

2020年4月13日 17:55