# 程式設計俱樂部每日一練(2018年11月29日)取蘋果
阿新 • • 發佈:2018-12-12
程式設計俱樂部每日一練(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; }