1 条题解

  • 0
    @ 2025-2-14 21:09:17

    C++ :

    #include <iostream>
    #include <cstring>
    #include <cmath>
    #include <fstream>
    
    using namespace std;
    
    int nNum = 0;
    int nLim = 0;
    int* szValue = NULL;
    
    bool JudgeSum(const int& n)
    {
    	int k = sqrt(n) + 1;
    	for (int i = 2; i <= k; ++i)
    	{
    		if (n % i == 0) return false;
    	}
    	return true;
    }
    
    void InputData()
    {
    	cin >>nNum >>nLim;
    	
    	szValue = new int[nNum + 1];
    	memset(szValue, 0, (nNum + 1) * sizeof(int));
    	for (int i = 0; i < nNum; ++i)
    	{
    		cin >>szValue[i];
    	}
    }
    
    void Search(int& nCnt, const int& n, const int& nPos, const int& nSum)
    {
    	if (n == nLim)
    	{
    		if (JudgeSum(nSum)) ++nCnt;
    		return;
    	}
    	
    	for (int i = nPos; i < nNum; ++i)
    	{
    		Search(nCnt, n + 1, i + 1, nSum + szValue[i]);
    	}
    }
    
    int CalcRes()
    {
    	int nCnt = 0;
    	Search(nCnt, 0, 0, 0);
    	
    	return nCnt;
    }
    
    int main()
    {
    	InputData();
    	cout <<CalcRes();
    	
    	delete []szValue;
    	szValue = NULL;
    	return 0;
    }
    
    • 1

    信息

    ID
    656
    时间
    1000ms
    内存
    128MiB
    难度
    (无)
    标签
    递交数
    0
    已通过
    0
    上传者