11.29 取苹果

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;
}

猜你喜欢

转载自blog.csdn.net/weixin_43763889/article/details/84677482