【题目来源】多校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());
}
}