Description
胜鹏dalao有n个苹果,编号为1-n。一天,子旭dalao想去胜鹏dalao那吃苹果,为了难住子旭dalao,胜鹏大佬给子旭dalao出了一道题。
所有苹果开始时都是未被取出的,子旭dalao要分别进行三次操作,每次操作他都选一个质数x,将编号为x及其倍数的苹果都操作一次(如果苹果被取出,那么操作后苹果应该被放回,回到未取出状态,如果苹果未被取出,则操作以后苹果被取出)
Input
输入T表示T组测试数据(1<=T<=100)
接下来T组测试数据
每组第一行一个n表示苹果的个数(1<=n<=10^9)
第二行三个数a,b,c表示子旭每次选择的数(1<=a,b,c<=10 6 )(a,b,c全为质数且a,b,c两两互不相等)
Output
输出子旭dalao能拿走的苹果的个数
1.被操作一次和三次的苹果被拿出
2.一个大数整除一个小数等于大数里面有多少个小数的倍数
3.n个质数的最小公倍数是它们相乘,所以只要是任意两个数的乘积的倍数的都被取了两次,三个数的乘积的倍数被取了三次
模拟一次这个过程 T=30 a,b,c=2,3,5
将被取两次的减去,会发现最后减了6个30,应该减2个,多减了4个,所以最后应加回4个来
代码如下
#include <stdio.h>
int main()
{
int t;
scanf("%d",&t);
while(t>0)
{
long long int n;
long int a,b,c;
int ans;
scanf("%lld",&n);
scanf("%ld %ld %ld",&a,&b,&c);
ans=n/a+n/b+n/c-(n/(a*b)+n/(a*c)+n/(b*c))*2+n/(a*b*c)*4;
printf("%d\n",ans);
t=t-1;
}
return 0;
}