2020年2月2日 ICPC2019徐州 现场赛C <3 numbers 思维题
Posted iat14
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了2020年2月2日 ICPC2019徐州 现场赛C <3 numbers 思维题相关的知识,希望对你有一定的参考价值。
问因数<3的数个数,是否小于给定区间1/3。因数<3除了1以外等价于素数。
据说杜教筛改成求素数前缀和的版本可以暴力做,但是并不会。
我们一个直观感受是,素数是越来越稀疏的,打表发现,50以外长度30以上,一定满足。而长度不到30的,用根号算法暴力判断每个元素即可。
注意要以乘代除,或者起码除double......
1 #include <cstdio> 2 #include <cmath> 3 using namespace std; 4 int T,l,r; 5 bool check(int x) 6 { 7 if (x == 1) 8 return true; 9 if (x == 2) 10 return true; 11 if (x == 3) 12 return true; 13 int t = sqrt(x); 14 for (int i = 2;i <= t;i++) 15 if (x % i == 0) 16 return false; 17 return true; 18 } 19 int main() 20 { 21 for (scanf("%d",&T);T;T--) 22 { 23 scanf("%d%d",&l,&r); 24 int cnt = 0; 25 if (r - l <= 30 || r <= 50) 26 { 27 for (int i = l;i <= r;i++) 28 if (check(i)) 29 { 30 cnt++; 31 if (3 * cnt >= r - l + 1) 32 break; 33 } 34 if (3 * cnt >= r - l + 1) 35 printf("No "); 36 else 37 printf("Yes "); 38 }else 39 printf("Yes "); 40 } 41 return 0; 42 }
以上是关于2020年2月2日 ICPC2019徐州 现场赛C <3 numbers 思维题的主要内容,如果未能解决你的问题,请参考以下文章