題目:把同時不能被2,3,5整除的數叫做神奇數。給你一個區間l,r(從l到r)。這個區間裡面有多少個神奇數。(l,r<231-1)
Time Limit: 1000/500 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
輸入:包含多組數據,每組數據有2個數了l,r。
輸出:輸出這個區間裡面神奇數的個數,輸出占一行。
樣例輸入:0 10
樣例輸出:2
思想:容斥思想
從1到n能被2整除的數有n/2個,能被3整除的數有n/3個,能被5整除的數有n/5個。
所以從1到n裡面的神奇數的個數是n-n/2-n/3-n/5嗎?
不是有的數能被2,3整除,有的數能被2,5整除,有的數能被3,5整除,有的數能被2,3,5整除。
所以從1到n的神奇數的個數應該是n-n/2-n/3-n/5+n/6+n/10+n/15+n/30。
#include<iostream> #include<cstdio> using namespace std; int main() { int l,r; int a,b,c,d,e,f,g; int gg; while(scanf("%d%d",&l,&r)!=EOF) { if(l>=2) { a=(l-1)/2;b=(l-1)/3;c=(l-1)/5;d=(l-1)/6;e=(l-1)/10;f=(l-1)/15;g=(l-1)/30; gg=(l-1)-a-b-c+d+e+f+g; } else gg=0; a=r/2;b=r/3;c=r/5;d=r/6;e=r/10;f=r/15;g=r/30; gg=r-a-b-c+d+e+f+g-gg; cout<<gg<<endl; } return 0; }