2017四川省省赛G

来源:互联网 发布:打印面单软件 编辑:程序博客网 时间:2024/04/28 05:04

这里写图片描述

给定区间,求区间内2个数乘积是某个质数的倍数的组合有多少个

这个套路题。我们假设区间为 a~b c~d 那么我们看b里有几个质数这里取2017,之后看a-1里有几个质数。 c~d区间同理。之后因为2017*2 *x也是2017的倍数,那么我们这里知道有多少个2017后乘以另一区间长度,另一区间同理,但是有重复,即a~b和c~d区间2017倍数个数的积。
具体看代码

#include <bits/stdc++.h>#define maxs 202020#define mme(i,j) memset(i,j,sizeof(i))using namespace std;long long cel(int l,int r,int p){    long long ans =0;    ans = (r/p)- ( (l-1)/p );    return ans;}int main(){    long long int a,b,c,d;    while(~scanf("%lld%lld%lld%lld",&a,&b,&c,&d)){        printf("%lld\n",cel(a,b,2017)*(d-c+1)+cel(c,d,2017)*(b-a+1) - cel(a,b,2017)*cel(c,d,2017) );    }    return 0;}