手速最快的蓝人
- 总时间限制: 1000ms
- 内存限制: 64 MB
描述
- 泰神是公认的104手速最快的蓝人,凭借惊人的手速在CF上成为了蓝泰(恩,马上就要紫泰了)。打代码不仅手速要快,而且姿势也得帅。但是由于手速太快,难免出现错误。某次泰神打完20个字符后,勋总发现,泰神在第1,3,7,9,11,13,17,19个字符的时候发生了错误(巧合的是这些数和20都是互素的)。经过长时间的观察,勋总发现泰神打代码出现错误的地方是有规律的。规律就如上诉所述(即第i个字符会出错,i与n互素且i<n)。一天泰神准备打含有n个字符的代码,勋总想算一下泰神有几个字符打错了。但是勋总发现泰神打的代码实在太多了,根本数不过来。这是他想起了一句至理名言:“放弃能解决百分百的问题”。于是他果断放弃,打算让你来帮他算。
输入格式:
输入整数n(2 <= n <= 20000000)表示泰神要打的代码的长度。
输出格式:
一个整数(出现错误的个数)。
样例输入
10
样例输出
4
来源
蓝桥校选试题
#include <bits/stdc++.h>
bool isprime[20000001];
int main(void)
{
int i, j,n,ans=0;
scanf("%d", &n);
memset(isprime,true, sizeof(isprime));
isprime[0] = false;
for (i = 2; i <= n; i++)//约数一定不是
if (n % i == 0)
isprime[i] = false;
for (i = 2; i <= n; i++)
if (isprime[i] == false)//约数的倍数一定不是
for (j = 2 * i; j <= n; j += i)
isprime[j] = false;
for (i = 1; i < n; i++)
if (isprime[i])
ans++;
printf("%d", ans);
return 0;
}
解题思路
数据不算太大,定义数组存放是否符合,先把约数标记,把约数的倍数标记,还是有重复,起码过了
总结
- 第二次做到反而不会了,嗯...要加强看题解了,对素数筛还不熟.

浙公网安备 33010602011771号