求条玄关
  • 板块题目总版
  • 楼主wuyugu
  • 当前回复0
  • 已保存回复0
  • 发布时间2025/7/20 15:20
  • 上次更新2025/7/20 17:14:43
查看原帖
求条玄关
1125456
wuyugu楼主2025/7/20 15:20

P6091

#include<bits/stdc++.h>
typedef long long ll;
typedef unsigned long long ull;
using namespace std;
const int N = 1e6+5;
vector<ll> p;
bool inp[N+5],ihg[N+5];
ll phi[N+5];
void init(){
	phi[1]=1;inp[1]=1;
	ihg[2]=ihg[4]=2;
	for(ll i=2;i<=N;i++){
		if(!inp[i])p.push_back(i),phi[i]=i-1,ihg[i]=1;
		for(ll pi:p){
			if(pi*i>N)break;
			phi[pi*i] = (pi-(i%pi!=0))*phi[i];
			inp[pi*i] = 1;
			if(ihg[i] && i%pi==0 && pi!=2)ihg[i*pi]=1;
			if(ihg[i] && pi==2 && i%2!=0)ihg[i*pi]=1;
			if(i%pi==0)break;
		}
	}
	return;
}
ll ksm(ll a,ll b,ll p){
	ll pow=a,ans=1;
	while(b){
		if(b&1)ans=ans*pow%p;
		pow = pow*pow%p;
		b>>=1;
	}
	return ans;
}
vector<ll> fenjie(int x){
	vector<ll> vl;
	for(int i=0;x!=1 && inp[x];i++){
		if(x%p[i]!=0)continue;
		while(x%p[i]==0)x/=p[i];
		vl.push_back(p[i]);
	}
	if(x!=1)vl.push_back(x);
	return vl;
}
int main(){
	init();
	int T;cin>>T;
	while(T--){
		ll n,d,mg;
		cin>>n>>d;
		if(!ihg[n]){
			printf("0\n\n");
			continue;
		}
		if(n==2){
			printf("1\n1\n");
			continue;
		}
		printf("%d\n",phi[phi[n]]);
		vector<ll> pv=fenjie(phi[n]),gen;
		for(int i=2;1;i++){
			int fl=0;
			if(__gcd(i*1ll,n)!=1)continue;
			for(auto pp : pv){
				if(ksm(i,phi[n]/pp,n)==1){fl=1;break;}
			}
			if(!fl){mg=i;break;}
		}
		for(int t=mg,i=1;t%n!=1;t=t*mg%n,i++){
			if(__gcd(i*1ll,phi[n])==1)gen.push_back(t);
		}
		sort(gen.begin(),gen.end());
		for(int i=d;i<=gen.size();i+=d)cout<<gen[i-1]<<" ";
		cout<<"\n";
	}
}
2025/7/20 15:20
加载中...