orz
by Naro_Ahgnay @ 2023-02-15 20:27:47
orz
by MSqwq @ 2023-02-15 20:28:19
○| ̄|_
by cccyyyxxx @ 2023-02-15 20:42:20
@[zengyean_bolt](/user/399674) @[MSqwq](/user/247269) 救救我
by _Catluo_ @ 2023-02-15 22:47:14
改疯了
by _Catluo_ @ 2023-02-15 22:47:32
改过了样例一
```cpp
#include <bits/stdc++.h>
#define int long long
using namespace std;
int n,p,ans;
struct node{
int x;
int s;
}a[505];
int z[8]={2,3,5,7,11,13,17,19};
bool cmp(node X,node Y){
return X.x<Y.x;
}
int f[(1<<8)+5][(1<<8)+5];//储存阶段的状态
int res[(1<<8)+5][(1<<8)+5][2];//存储大的质因数相同的一段
int now,pre=1;
signed main(){
f[0][0]=1;
cin>>n>>p;n--;
for(int i=1;i<=n;i++)a[i].x=i+1;
for(int i=1;i<=n;i++){
for(int j=7;j>=0;j--){//分解质因数
if(a[i].x%z[j]==0){
a[i].s+=(1<<j);
while(a[i].x%z[j]==0)a[i].x/=z[j];
}
}
}
sort(a+1,a+n+1,cmp);//大于22的质因数排序
for(int i=1;i<=n;i++){
if(i==1||a[i].x!=a[i-1].x||a[i].x==1){
for(int j=0;j<(1<<8);j++){
for(int k=0;k<(1<<8);k++){
if((j&k)==0){
res[j][k][0]=res[j][k][1]=f[j][k];//覆盖
}
}
}
}
for(int j=255;j>=0;j--){
for(int k=255;k>=0;k--){
if(j&k)continue;
if(((j|a[i].s)&k)==0)res[j|a[i].s][k][0]=(res[j|a[i].s][k][0]+res[j][k][0])%p;//给第一个人
if((j&(k|a[i].s))==0)res[j][k|a[i].s][1]+=(res[j][k|a[i].s][1]+res[j][k][1])%p;//给第二个人
}
}
if(a[i].x!=a[i+1].x||i==n||a[i].x==1){
for(int j=0;j<(1<<8);j++){
for(int k=0;k<(1<<8);k++){
if((j&k)==0){
f[j][k]=(res[j][k][0]+res[j][k][1]-f[j][k]+p)%p;//记录下阶段的答案
}
}
}
}
}
for(int j=0;j<(1<<8);j++)
for(int k=0;k<(1<<8);k++)
if((j&k)==0)
ans=(ans+f[j][k])%p;
cout<<ans<<endl;
return 0;
}
```
by _Catluo_ @ 2023-02-17 18:34:52
42行多了一个 $+$
```cpp
if((j&(k|a[i].s))==0)res[j][k|a[i].s][1]+=(res[j][k|a[i].s][1]+res[j][k][1])%p;//给第二个人
```
已经过了此贴完结
by _Catluo_ @ 2023-02-17 18:48:58
orz
by cxqghzj @ 2023-09-05 19:24:09
orz
by zzy_zzy @ 2023-09-13 22:24:03