代码70分,好像无法拿到只判断合法性的分啊,是不是我代码的问题。但是下载数据输出全是0/1啊。怎么得到剩下30分?
#include<bits/stdc++.h>
#define int long long
#define ll long long
#define ld long double
using namespace std;
const int N=2e5+10;
int T,p;ll inv[N];
bool prime(int x){
int sq=sqrt(x);
for(int i=2;i<=sq;i++)
if(!(x%i)) return false;
return true;
}
signed main(){
scanf("%lld%lld",&T,&p);
while(p--){
int n;
scanf("%lld",&n);
if(T==1){
if(n&1){
printf("0\n");
continue;
}
printf("2 %lld ",n);
for(int i=1;i<n;i++){
if(i&1) printf("%lld ",i);
else printf("%lld ",n-i);
}
printf("\n");
}
else{
if(n==1||(n>4&&!prime(n))) printf("0\n");
else if(n==2) printf("2 1 2\n");
else if(n==4) printf("2 1 3 2 4\n");
else{
inv[0]=inv[1]=1;
for(int i=2;i<=n;i++) inv[i]=(ll)(n-n/i)*inv[n%i]%n;
printf("2 1 2 ");
for(int i=3;i<n;i++) printf("%lld ",1+inv[i-1]);
printf("%lld\n",n);
}
}
}
return 0;
}