https://blog.csdn.net/sunny_hun/article/details/79253109
https://blog.csdn.net/sinat_37341950/article/details/79253741
题目:
给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。
输入描述: 本题有多组输入 每行一个数n,1<=n<=10^18.
输出描述: 每行输出输出不是2 5 11 13的倍数的数共有多少。
思路: 先分别求有多少是2、5、11、13的倍数,设分别有a、b、c、d个。 然后分别求有多少是10(2和5最小公倍数)、22(2和11最小公倍数)、26(2和13最小公倍数)、55(5和11最小公倍数)、65(5和13最小公倍数)、143(11和13)最小公倍数的倍数,设分别有e、f、g、h、i、j个。 再分别求有多少是110(2、5、11最小公倍数)、130(2、5、13最小公倍数)、715(5、11、13最小公倍数)、286(2、11、13最小公倍数)的倍数,设分别有k、l、m、n个。 再求有多少是1430(2、5、11、13最小公倍数)的倍数,设有o个, 最后,不是2、5、11、13的倍数的数字有: [n-(a+b+c+d)+(e+f+g+h+i+j)-(k+l+m+n)+o]个
C++代码:
#include<iostream>
using namespace std;
int main()
{
long long n,sum=0;
long long a,b,c,d,ab,ac,ad,bc,bd,cd,abc,acd,bcd,abd,abcd;
while(cin>>n)
{
//2,5,11,13的倍数
a=n/2;
b=n/5;
c=n/11;
d=n/13;
//两数的倍数
ab=n/10;
ac=n/22;
ad=n/26;
bc=n/55;
bd=n/65;
cd=n/143;
//三数的倍数
abc=n/110;
abd=n/130;
acd=n/286;
bcd=n/715;
//四数的倍数
abcd=n/1430;
sum=a+b+c+d-ab-ac-ad-bc-bd-cd+abc+abd+acd+bcd-abcd;
cout<<n-sum<<endl;
}
return 0;
}