Run ID | 作者 | 问题 | 语言 | 测评结果 | 分数 | 时间 | 内存 | 代码长度 | 提交时间 |
---|---|---|---|---|---|---|---|---|---|
34312 | 22级廖思学 | 【S】T1 | C++ | 解答错误 | 40 | 106 MS | 284 KB | 1174 | 2024-11-05 19:57:27 |
#include<bits/stdc++.h> using namespace std; #define int long long const int N=1e7+10; int T,n,p[N],cnt; int phi(int m){ // cout<<m<<endl; int res=m; for(int i=2;i*i<=m;i++){ if(m%i)continue; while(m%i==0){m/=i;} res=res/i*(i-1); // cout<<i<<" "<<res<<" "<<m<<endl; } if(m!=1)res=res/m*(m-1); return res; } int ksm(int a,int b,int m){ int ans=1,base=a; while(b>0){ if(b&1){ans=(__int128_t)ans*base%m;} base=(__int128_t)base*base%m; b>>=1; } return ans; } bool check(int i){return ksm(2,i,n*2-1)==1;} signed main(){ // freopen("card.out","w",stdout); cin>>T; while(T--){ cnt=0; cin>>n; if(n==1){cout<<1<<endl;continue;} // cout<<n<<endl; int k=phi(2*n-1); // cout<<k<<endl; for(int i=1;i*i<=k;i++){ if(k%i==0){p[++cnt]=i;} } for(int i=cnt;i>=1;i--){p[cnt*2-i+1]=k/i;} for(int i=1;i<=cnt*2;i++){ if(check(p[i])){ cout<<p[i]<<endl; break; } } } return 0; }