主要考兩個知識點:判斷乙個數是否為素數、從n個數中選出m個數的組合
判斷乙個數是否為素數:
素數一定是6n+1或者6n-1
如果是6n,則可以被6整除
如果是6n+2,可以被2整除
如果是6n+3,可以被3整除
如果是6n+4,可以被2整除
而6n+5等同於6n-1
組合數:
參考部落格:
採用遞迴,從n個數里選出下標最大的乙個數,從n-1個數里再選出下標最大的乙個數,直到剩餘n-m+1個數,再選出最後乙個
如此反覆,直到最大的下標為m
**如下:
#include#include#define maxn 500
using
namespace
std;
intm;
intcnt;
bool isprime(int
num)
if(num % 6 != 1 && num % 6 != 5
)
int x = (int
)sqrt(num);
for(int i = 5; i <= x; i += 6
) }
return
true;}
void combine(int a, int n, int m, int
b)
else
if(isprime(sum))}}
}int
main()
combine(a, n, m, b);
printf(
"%d\n
", cnt);
return0;
}
洛谷P1036 選數
已知 n 個整數 x1,x2,xn,以及乙個整數 k k n 從 n 個整數中任選 k 個整數相加,可分別得到一系列的和。例如當 n 4,k 3,4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34。...
洛谷 P1036選數
已知 n 個整數 x1,x2,xn以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29。輸入格式 鍵盤輸入,格式為 n,k 1 n 20,kx1,x2,xn 1 x...
洛谷P1036選數
題目描述 已知 n 個整數 x1,x2,xn,以及1個整數k k3 7 12 22 3 7 19 29 7 12 19 38 3 12 19 34 現在,要求你計算出和為素數共有多少種。例如上例,只有一種的和為素數 3 7 19 29 輸入樣例 4 33 7 12 19 輸出樣例 1 include...