求解1 n中不是5也不是6也不是8的倍數的個數

2022-10-09 23:42:23 字數 1349 閱讀 1616

一、解法1

硬推公式:得到公式為n - (n / 5 + n / 6 + n / 8 - n / 30  - n / 40 - n / 24 + n /120)

**實現:

1 #include 2 #include 3 #include 4 #include 5 #include 

6 #include 7 #include 8 #include 9 #include

10 #include 11 #include 12 #include 13

#define pii pair14

#define rep(i,z,n) for(int i = z;i <= n; i++)

15#define per(i,n,z) for(int i = n;i >= z; i--)

16#define ll long long

17#define db double

18#define vi vector19

#define debug(x) cerr << "!!!" << x << endl;

20using

namespace

std;

21inline ll read()

2232

while(ch >= '

0' && ch <= '9'

)36return s *r;37}

38 inline void

write(ll x)

3944

intmain()

45

二、借助韋恩圖觀察

三個圈代表5 和 6 和 8的倍數的數

首先我們求是5的倍數就是n/5

然後就是6的倍數就是n/6

然後就是8的倍數就是n/8

我們會發現多加了重複的部分(彩色部分)

也就是5和6的中間,5和8的中間,6和8的中間

然後就是減去n/30(30是5和6的最小公倍數)

然後就是減去n/24 (24是6和8的最小公倍數)

然後就是減去n/40(40就是5和8的最小公倍數)

我們發現會多減了5 和 6 和 8中間的一部分(藍色部分)

那我們就要加回來就是n/(120)(120是5和6和8的最小公倍數)

**實現如上

求1 n中1的個數

輸入乙個整數,求1 n這n個數的十進位制表示1的個數。將n的十進位制的每一位單獨拿出討論,每一位的值記為weight。1 個位 假若n 534。534的個位從0 9變化了53次,這53我們記為round。因為weight為4 0。因此第54輪為0 4,因此1出現了count round 1。若wei...

解決Hibernate中1 n的問題

一 1 n 在執行查詢時,傳送一條sql語句獲取n個主體物件,當需要使用這n個主體物件的關聯屬性時,hibernate又傳送n條sql語句查詢這個n個主體物件的關聯屬性,這就是1 n問題。listlist session.createquery from dept list 傳送一條sql語句查詢主...

1 n中1出現的次數

輸入乙個整數 n 求1 n這n個整數的十進位制表示中1出現的次數。例如,輸入12,1 12這些整數中包含1 的數字有1 10 11和12,1一共出現了5次。示例 1 輸入 n 12 輸出 5 示例 2 輸入 n 13 輸出 6 解析需要通過找規律來分析。假設我們對5014這個數字求解。1 個位上1出...