1 条题解

  • 0
    @ 2023-6-11 12:16:46

    C++ :

    #include<iostream>
    #include<cmath>
    using namespace std;
    int num[50];
    int n;
    int index=0;
    int maxtotal=-1;
     
    //判断素数
    bool sushu(int m)
    {
        bool r = true;
        for (int i=2;i<=sqrt(m);i++)
        {
                if (m % i == 0){
    				r = false;
    				break;            	
    			}
        }
        if(m <= 1){
        	   r = false;
    	}
        
        return r;
    }
    
     
    //k为当前下标,sum为总和,total为使用的数字的个数
    void fun(int k,int sum,int total)
    {
       if (sum==n)
       {
           if (total>maxtotal)//更新total
           {
               maxtotal=total;
           }
           return;
       }
       if (sum>n||k>=index)//如果sum超过n,或者下标大于素数个数结束
       {
           return;
       }
       fun(k+1,sum+num[k],total+1);
       fun(k+1,sum,total);
    }
    
    int main()
    {
     
        cin>>n;
     
        for (int i=2;i<=n;i++)
        {
            if (sushu(i))//如果是素数,将其存进num数组
            {
                num[index++]=i;
            }
        }
     
        fun(0,0,0);
        cout<<maxtotal;
        return 0;
    }
    
    
    • 1

    信息

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