1. 程式人生 > ># 程式設計俱樂部每日一練(2018年11月29日)取蘋果

# 程式設計俱樂部每日一練(2018年11月29日)取蘋果

程式設計俱樂部每日一練(2018年11月29日)取蘋果

Description

勝鵬dalao有nn個蘋果,編號為1-n1−n。一天,子旭dalao想去勝鵬dalao那吃蘋果,為了難住子旭dalao,勝鵬大佬給子旭dalao出了一道題。

所有蘋果開始時都是未被取出的,子旭dalao要分別進行三次操作,每次操作他都選一個質數xx,將編號為xx及其倍數的蘋果都操作一次(如果蘋果被取出,那麼操作後蘋果應該被放回,回到未取出狀態,如果蘋果未被取出,則操作以後蘋果被取出)

Input

輸入TT表示TT組測試資料(1<=T<=100)(1<=T<=100)
接下來TT組測試資料

每組第一行一個nn表示蘋果的個數(1<=n<=10^9)(1<=n<=10
9
)
第二行三個數a,b,ca,b,c表示子旭每次選擇的數(1<=a,b,c<=10^6)(1<=a,b,c<=10
6
)(a,b,ca,b,c全為質數且a,b,ca,b,c兩兩互不相等)

Output

輸出子旭dalao能拿走的蘋果的個數

Sample Input 1

1
30
2 3 5
Sample Output 1

15


思路:用所有操作過的蘋果數量減去操作兩次的蘋果數量。
找規律
用蘋果總數整除質數為操作過的蘋果數目,而操作兩次的蘋果標號為三個質數兩兩相乘所得數及其倍數。
最後將多次計算到的數減掉。
程式碼:

#include <stdio.h>
int main()
{
    int T,n,a,b,c;
    scanf("%d",&T);
    while(T--){
        scanf("%d",&n);
        scanf("%d%d%d",&a,&b,&c);
        int sum;
        sum=n/a+n/b+n/c-(n/a/b+n/b/c+n/c/a)*2;//每個蘋果在被減數中出現了兩次,所以減數要乘二。
        if (n%a*b*c==0){
            printf("%d\n",sum+n/(a*b*c)*4);//拿樣例來說,30出現了3次,減掉了6次,最後加4,以此類推。
        }
        else{
            printf("%d\n",sum);
        }
    }
    return 0;
}