1 条题解

  • 0
    @ 2021-6-14 23:29:23

    C :

    #include<stdio.h>
    #include<math.h>
    //20928: 选数
    
    
    int tes=0;
    
    int test(int n)//验证质数,是则返回1
    {
    	int i,ans=1;
    
    	switch(n)
    	{
    	case 1:
    	case 4:ans=0;break;
    	}
    
    	for(i=2;i<n;i++)
    	{
    		if(n%i==0)
    		{
    			ans=0;
    			break;
    		}
    	}
    	return ans;
    }
    
    
    
    int f(int k0,int k,int n,int x[20],int he0,int i1,int he1)
    {
    	int sum1=0,i;
    	he1=he0;
    	//n--;
    	{
    		if(k==k0)
    		{
    			he0=0;
    			//n++;
    		}
    	}
    
    	if((k>=1)&&(i1<=n))
    	{
    		for(i=i1;i<n;i++)
    		{
    			he0=he1;
    			he0=he0+x[i];
    			sum1=f(k0,k-1,n,x,he0,i+1,he1)+sum1;	
    		}
    		return sum1;
    	}
    	else
    		sum1=test(he0);
    		tes++;
    		return sum1;
    }
    
    
    int main()
    {
    	int x[20];
    	int k,n,i;
    	int ans;
    	
    
    	scanf("%d%d",&n,&k);
    
    	for(i=0;i<n;i++)
    	{
    		scanf("%d",&x[i]);
    	}
    
    	ans=f(k,k,n,x,0,0,0);
    	printf("%d",ans);
    
    	return 0;
    }
    

    C++ :

    #include<iostream>
    #include<cmath>
    #include<set>
    using namespace std;
    bool is_prime(int n)
    {
    	if(n==1)
    		return 0;
    	if(n==2)
    		return 1;
    	for(int i=2;i<sqrt(n)+1;i++)
    		if(n%i==0)
    			return 0;
    	return 1;
    }
    int num[25];
    int main()
    {
    	int n,d,a,b,c,i,j,k,l,m,o,p,q,s,r,t,u,v,x,y,z;
    	int count;
    	multiset <int> s1;
    	while(cin>>n>>d)
    	{
    		for(i=0;i<n;i++)
    			cin>>num[i];
    		if(d==1)
    		{
    			for(i=0;i<n;i++)
    				s1.insert(num[i]);
    		}
    		if(d==2)
    		{
    			for(i=0;i<n-1;i++)
    				for(j=i+1;j<n;j++)
    					s1.insert(num[i]+num[j]);
    		}
    		if(d==3)
    		{
    			for(i=0;i<n-2;i++)
    				for(j=i+1;j<n-1;j++)
    					for(k=j+1;k<n;k++)
    						s1.insert(num[i]+num[j]+num[k]);
    		}
    		if(d==4)
    		{
    			for(i=0;i<n-3;i++)
    				for(j=i+1;j<n-2;j++)
    					for(k=j+1;k<n-1;k++)
    						for(l=k+1;l<n;l++)
    							s1.insert(num[i]+num[j]+num[k]+num[l]);
    		}
    		if(d==5)
    		{
    			for(i=0;i<n-4;i++)
    				for(j=i+1;j<n-3;j++)
    					for(k=j+1;k<n-2;k++)
    						for(l=k+1;l<n-1;l++)
    							for(m=l+1;m<n;m++)
    								s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]);
    		}
    		if(d==6)
    		{
    			for(i=0;i<n-5;i++)
    				for(j=i+1;j<n-4;j++)
    					for(k=j+1;k<n-3;k++)
    						for(l=k+1;l<n-2;l++)
    							for(m=l+1;m<n-1;m++)
    								for(o=m+1;o<n;o++)
    									s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]);
    		}
    		if(d==7)
    		{
    			for(i=0;i<n-6;i++)
    				for(j=i+1;j<n-5;j++)
    					for(k=j+1;k<n-4;k++)
    						for(l=k+1;l<n-3;l++)
    							for(m=l+1;m<n-2;m++)
    								for(o=m+1;o<n-1;o++)
    									for(p=o+1;p<n;p++)
    										s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]);
    		}
    		if(d==8)
    		{
    			for(i=0;i<n-7;i++)
    				for(j=i+1;j<n-6;j++)
    					for(k=j+1;k<n-5;k++)
    						for(l=k+1;l<n-4;l++)
    							for(m=l+1;m<n-3;m++)
    								for(o=m+1;o<n-2;o++)
    									for(p=o+1;p<n-1;p++)
    										for(q=p+1;q<n;q++)
    										   s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+num[q]);
    		}
    		if(d==9)
    		{
    			for(i=0;i<n-8;i++)
    				for(j=i+1;j<n-7;j++)
    					for(k=j+1;k<n-6;k++)
    						for(l=k+1;l<n-5;l++)
    							for(m=l+1;m<n-4;m++)
    								for(o=m+1;o<n-3;o++)
    									for(p=o+1;p<n-2;p++)
    										for(q=p+1;q<n-1;q++)
    											for(r=q+1;r<n;r++)
    										       s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+num[q]+num[r]);
    		}
    		if(d==10)
    		{
    			for(i=0;i<n-9;i++)
    				for(j=i+1;j<n-8;j++)
    					for(k=j+1;k<n-7;k++)
    						for(l=k+1;l<n-6;l++)
    							for(m=l+1;m<n-5;m++)
    								for(o=m+1;o<n-4;o++)
    									for(p=o+1;p<n-3;p++)
    										for(q=p+1;q<n-2;q++)
    											for(r=q+1;r<n-1;r++)
    												for(s=r+1;s<n;s++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+num[q]+num[r]+num[s]);
    		}
    		if(d==11)
    		{
    			for(i=0;i<n-10;i++)
    				for(j=i+1;j<n-9;j++)
    					for(k=j+1;k<n-8;k++)
    						for(l=k+1;l<n-7;l++)
    							for(m=l+1;m<n-6;m++)
    								for(o=m+1;o<n-5;o++)
    									for(p=o+1;p<n-4;p++)
    										for(q=p+1;q<n-3;q++)
    											for(r=q+1;r<n-2;r++)
    												for(s=r+1;s<n-1;s++)
    													for(t=s+1;t<n;t++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+num[q]+num[r]+num[s]+num[t]);
    		}
    		if(d==12)
    		{
    			for(i=0;i<n-11;i++)
    				for(j=i+1;j<n-10;j++)
    					for(k=j+1;k<n-9;k++)
    						for(l=k+1;l<n-8;l++)
    							for(m=l+1;m<n-7;m++)
    								for(o=m+1;o<n-6;o++)
    									for(p=o+1;p<n-5;p++)
    										for(q=p+1;q<n-4;q++)
    											for(r=q+1;r<n-3;r++)
    												for(s=r+1;s<n-2;s++)
    													for(t=s+1;t<n-1;t++)
    														for(u=t+1;u<n;u++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+num[q]+num[r]+num[s]+num[t]+num[u]);
    		}
    		if(d==13)
    		{
    			for(i=0;i<n-12;i++)
    				for(j=i+1;j<n-11;j++)
    					for(k=j+1;k<n-10;k++)
    						for(l=k+1;l<n-9;l++)
    							for(m=l+1;m<n-8;m++)
    								for(o=m+1;o<n-7;o++)
    									for(p=o+1;p<n-6;p++)
    										for(q=p+1;q<n-5;q++)
    											for(r=q+1;r<n-4;r++)
    												for(s=r+1;s<n-3;s++)
    													for(t=s+1;t<n-2;t++)
    														for(u=t+1;u<n-1;u++)
    															for(v=u+1;v<n;v++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]);
    		}
    		if(d==14)
    		{
    			for(i=0;i<n-13;i++)
    				for(j=i+1;j<n-12;j++)
    					for(k=j+1;k<n-11;k++)
    						for(l=k+1;l<n-10;l++)
    							for(m=l+1;m<n-9;m++)
    								for(o=m+1;o<n-8;o++)
    									for(p=o+1;p<n-7;p++)
    										for(q=p+1;q<n-6;q++)
    											for(r=q+1;r<n-5;r++)
    												for(s=r+1;s<n-4;s++)
    													for(t=s+1;t<n-3;t++)
    														for(u=t+1;u<n-2;u++)
    															for(v=u+1;v<n-1;v++)
    																for(x=v+1;x<n;x++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]);
    		}
    		if(d==15)
    		{
    			for(i=0;i<n-14;i++)
    				for(j=i+1;j<n-13;j++)
    					for(k=j+1;k<n-12;k++)
    						for(l=k+1;l<n-11;l++)
    							for(m=l+1;m<n-10;m++)
    								for(o=m+1;o<n-9;o++)
    									for(p=o+1;p<n-8;p++)
    										for(q=p+1;q<n-7;q++)
    											for(r=q+1;r<n-6;r++)
    												for(s=r+1;s<n-5;s++)
    													for(t=s+1;t<n-4;t++)
    														for(u=t+1;u<n-3;u++)
    															for(v=u+1;v<n-2;v++)
    																for(x=v+1;x<n-1;x++)
    																	for(y=x+1;y<n;y++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]+num[y]);
    		}
    		if(d==16)
    		{
    			for(i=0;i<n-15;i++)
    				for(j=i+1;j<n-14;j++)
    					for(k=j+1;k<n-13;k++)
    						for(l=k+1;l<n-12;l++)
    							for(m=l+1;m<n-11;m++)
    								for(o=m+1;o<n-10;o++)
    									for(p=o+1;p<n-9;p++)
    										for(q=p+1;q<n-8;q++)
    											for(r=q+1;r<n-7;r++)
    												for(s=r+1;s<n-6;s++)
    													for(t=s+1;t<n-5;t++)
    														for(u=t+1;u<n-4;u++)
    															for(v=u+1;v<n-3;v++)
    																for(x=v+1;x<n-2;x++)
    																	for(y=x+1;y<n-1;y++)
    																		for(z=y+1;z<n;z++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]+num[y]+num[z]);
    		}
    		if(d==17)
    		{
    			for(i=0;i<n-16;i++)
    				for(j=i+1;j<n-15;j++)
    					for(k=j+1;k<n-14;k++)
    						for(l=k+1;l<n-13;l++)
    							for(m=l+1;m<n-12;m++)
    								for(o=m+1;o<n-11;o++)
    									for(p=o+1;p<n-10;p++)
    										for(q=p+1;q<n-9;q++)
    											for(r=q+1;r<n-8;r++)
    												for(s=r+1;s<n-7;s++)
    													for(t=s+1;t<n-6;t++)
    														for(u=t+1;u<n-5;u++)
    															for(v=u+1;v<n-4;v++)
    																for(x=v+1;x<n-3;x++)
    																	for(y=x+1;y<n-2;y++)
    																		for(z=y+1;z<n-1;z++)
    																			for(a=z+1;a<n;a++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]+num[y]+num[z]+num[a]);
    		}
    		if(d==18)
    		{
    			for(i=0;i<n-17;i++)
    				for(j=i+1;j<n-16;j++)
    					for(k=j+1;k<n-15;k++)
    						for(l=k+1;l<n-14;l++)
    							for(m=l+1;m<n-13;m++)
    								for(o=m+1;o<n-12;o++)
    									for(p=o+1;p<n-11;p++)
    										for(q=p+1;q<n-10;q++)
    											for(r=q+1;r<n-9;r++)
    												for(s=r+1;s<n-8;s++)
    													for(t=s+1;t<n-7;t++)
    														for(u=t+1;u<n-6;u++)
    															for(v=u+1;v<n-5;v++)
    																for(x=v+1;x<n-4;x++)
    																	for(y=x+1;y<n-3;y++)
    																		for(z=y+1;z<n-2;z++)
    																			for(a=z+1;a<n-1;a++)
    																				for(b=a+1;b<n;b++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]+num[y]+num[z]+num[a]+num[b]);
    		}
    		if(d==19)
    		{
    			for(i=0;i<n-18;i++)
    				for(j=i+1;j<n-17;j++)
    					for(k=j+1;k<n-16;k++)
    						for(l=k+1;l<n-15;l++)
    							for(m=l+1;m<n-14;m++)
    								for(o=m+1;o<n-13;o++)
    									for(p=o+1;p<n-12;p++)
    										for(q=p+1;q<n-11;q++)
    											for(r=q+1;r<n-10;r++)
    												for(s=r+1;s<n-9;s++)
    													for(t=s+1;t<n-8;t++)
    														for(u=t+1;u<n-7;u++)
    															for(v=u+1;v<n-6;v++)
    																for(x=v+1;x<n-5;x++)
    																	for(y=x+1;y<n-4;y++)
    																		for(z=y+1;z<n-3;z++)
    																			for(a=z+1;a<n-2;a++)
    																				for(b=a+1;b<n-1;b++)
    																					for(c=b+1;c<n;c++)
    										           s1.insert(num[i]+num[j]+num[k]+num[l]+num[m]+num[o]+num[p]+
    												   num[q]+num[r]+num[s]+num[t]+num[u]+num[v]+num[x]+num[y]+num[z]+num[a]+num[b]+num[c]);
    		}
    		multiset<int>::iterator it;
    		for(it=s1.begin(),count=0;it!=s1.end();it++)
    		{
    			if(is_prime(*it))
    				count++;
    		}
    		cout<<count<<endl;
    		s1.clear();
    	}
    	return 0;
    }
    
    

    Pascal :

    var
       i,j,k,n,m,x,y,f,t,ans:longint;
       a,b:array[0..100000] of longint;
    begin
     readln(n,k);
     ans:=0;
     for i:=1 to n do read(a[i]);
     while b[n+1]<>1 do
      begin
       f:=0;y:=0;
       for i:=1 to n+1 do
        if b[i]=0 then break
        else b[i]:=0;
       b[i]:=1;
       for i:=1 to n do if b[i]=1 then inc(y);
       if y=k then
        begin
         for i:=1 to n do
         if b[i]=1 then f:=f+a[i];
         for i:=2 to trunc(sqrt(f)) do
         if f mod i=0 then
          begin
           f:=-1;
           break;
          end;
         if (f>-1)and(f<>1) then inc(ans);
        end;
      end;
     writeln(ans);
    end.
    

    Java :

    import java.util.*;
    public class Main {
    	static int ans=0;
    	static Scanner in=new Scanner(System.in);
    	static int n=in.nextInt();
    	static int k=in.nextInt();
    	static int a[]=new int[n+2];
    	public static void main(String[] args) {
    		// TODO Auto-generated method stub
    		
    		for(int i=0;i<n;i++)
    		{
    			a[i]=in.nextInt();			
    		}
     
    		dfs(0,k,0);
    		
    		System.out.println(ans);
    	}
    static int c=0;
    	private static void dfs(int sum,int choo,int now) {
    		if(n-now<choo)return;
    		if(choo==0){		
    			
    			if(is_prime(sum)==1){
     
    				ans++;				
    			}
    			return ;
    		}
    		
    		
    			dfs(sum+a[now],choo-1,now+1);
    			dfs(sum,choo,now+1);
    			
    			
    		
    	}
     
    	private static int is_prime(int sum) {
    		// TODO Auto-generated method stub
    		if(sum==1)return 0;
    		for(int i=2;i*i<=sum;i++)
    			if(sum%i==0)
    				return 0;
    		return 1;
    	}
     
    }
    
    • 1