Dividing Stones

来源:互联网 发布:谷歌seo初级指南2016 编辑:程序博客网 时间:2024/06/05 02:21

【题目来源】多校2014 

【题目分析】看到该题就应该想到dfs的,现在我也讲不清楚,只是我心里明白。

【代码】

#include <iostream>#include <stdio.h>#include <set>using namespace std;int primenum[10000];int vis[100];int p;void prime() {    int num = 0;    for(int i = 2; i <= 80; i ++) {        if(!vis[i]) {            primenum[num++] = i;            for(int j = i * 2 ; j <=80; j += i) {                vis[j] = 1;            }        }    }}set<int>s;void dfs(int nu,int now,long long ans) {    s.insert(ans);    if(now < primenum[nu]) return;    dfs(nu,now-primenum[nu],ans*primenum[nu]%p);    dfs(nu+1,now,ans);}int main(){    freopen("in.txt","r",stdin);    prime();    int t;    scanf("%d",&t);    while(t--) {        int n;        scanf("%d%d",&n,&p);        s.clear();        dfs(0,n,1);        printf("%d\n",s.size());    }}


0 0
原创粉丝点击