小明的密码

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath>

using namespace std;

int p[50],a[20];
int n,m,cnt;

void prime()
{
    for(int i=1;i<=50;i++) p[i]=1;
    p[1]=0;
    for(int i=1;i<=50;i++)
    {
        for(int j=2;j<=sqrt(i);j++)
        {
            if(i/j*j==i)
                p[i]=0;
        }
    }
}

void mima(int pos,int sum)
{
    if(pos==n+1)
    {
        cnt+=1;
        return;
    }
    if(pos<m)
    {
        for(int i=0;i<10;i++)
        {
            a[pos]=i;//不要忘了
            mima(pos+1,sum+i);
        }
    }
    else
    {
        for(int i=0;i<10;i++)
        {
            if(p[sum+i])
            {
                a[pos]=i;//不要忘了
                mima(pos+1,sum+i-a[pos-m+1]);
            }
        }
    }
}

int main()
{
    prime();//不要忘了
    int w;
    cin>>w;
    while(w--)
    {
        cnt=0;
        cin>>n>>m;
        mima(1,0);
        cout<<cnt<<endl;
    }
    return 0;
}

深度遍历

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容