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\n"); 36 else 37 printf("Yes\n"); 38 }else 39 printf("Yes\n"); 40 } 41 return 0; 42 }
心之所动 且就随缘去吧