【牛客网】 G-大水题

链接:https://www.nowcoder.net/acm/contest/75/G
来源:牛客网
 

时间限制:C/C++ 1秒,其他语言2秒
空间限制:C/C++ 32768K,其他语言65536K
64bit IO Format: %lld

题目描述

给出一个数n,求1到n中,有多少个数不是2 5 11 13的倍数。

输入描述:

本题有多组输入
每行一个数n,1<=n<=10^18.

输出描述:

每行输出输出不是2 5 11 13的倍数的数共有多少。
 

输入

15

输出

4

说明

1 3 7 9
 
 
题解:
主要是套公式,不能用for来循环一遍数据判断是否符合条件。


先分别求有多少是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)最小公倍数的倍数,设分别有ab,ac,ad,bc,bd,cd个。


再分别求有多少是110(2、5、11最小公倍数)、130(2、5、13最小公倍数)、715(5、11、13最小公倍数)、286(2、11、13最小公倍数)的倍数,设分别有abc,abd,acd,bcd个。

再求有多少是1430(2、5、11、13最小公倍数)的倍数,设有abcd个,

最后,不是2、5、11、13的倍数的数字有:
[n-(a+b+c+d)+(ab+ac+ad+bc+bd+cd)-(abc+abd+acd+bcd)+abcd]个
借鉴文章出处: 点击打开链接
 
#include<stdio.h>
int main()
{
	long long int n,a,b,c,d,ab,ac,ad,bc,bd,cd,abc,abd,acd,bcd,abcd;
	while(~scanf("%lld",&n))
	{
		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/715;
		bcd=n/286;
		abcd=n/1430;
		printf("%lld\n",n-(a+b+c+d)+(ab+ac+ad+bc+bd+cd)-(abc+abd+acd+bcd)+abcd);
	}
	return 0;
} 

 
 
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值