拆素數【找規律,數學】
阿新 • • 發佈:2021-01-29
技術標籤:筆試題
牛牛現在有一個包含 n 個正整數的陣列 a ,牛牛可以將其中的每個數 a[i] 都拆成若干個和為 a[i] 的正整數,牛牛想知道拆後(也可以一個數都不拆)這個陣列最多能有多少個素數。
對於1,它本來就不是素數,最多能拆成0個素數的和;
對於2和3,最多能拆成1個素數的和;
4 = 2 + 2,最多能拆成2個素數的和;
5 = 2 + 3,最多能拆成2個素數的和;
6 = 2 + 2 + 2,最多能拆成3個素數的和;
7 = 2 + 2 + 3,最多能拆成3個素數的和;
8 = 2 + 2 + 2 + 2,最多能拆成4個素數的和;
……
由此易知,從4開始,所有的數都可以拆成若干2和3的和,並且可以通是否有3來控制奇偶性。num%20時,有多少個2就有多少個素數,此時(num+1)%2
如此一來,我們就可以通過遍歷陣列得到答案:
#include <iostream>
#include <vector>
using namespace std;
int main() {
int n, m;
cin >> n;
long long int cnt = 0;
while (n) {
cin >> m;
if(m == 2 || m == 3) {
++cnt;
}
else {
cnt += m / 2;
}
n--;
}
cout << cnt << endl;
}