名字是我瞎起的……
[UPD 4.14]我也是一个男人了哈哈哈哈
最近有点忙,很久没来,除个草
[BZOJ4802]Pollard-rho直接上
[BZOJ4803]大力搜索,大于1e7的质数判掉
#include<bits/stdc++.h> using namespace std; typedef long long LL; const int maxn=1e7+7; const int BASE[12] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37}; LL mul(LL a, LL b, LL P) { LL t = (a * b - LL((long double)a / P * b + 1e-3) * P) % P; return t < 0 ? t + P : t; } LL pw(LL x,LL k,LL mo){ LL ans=1; for(;k;k>>=1){ if(k&1)ans=mul(ans,x,mo)%mo; x=mul(x,x,mo)%mo; } return ans%mo; } bool check(long long n,int base) { long long n2=n-1,res; int s=0; while(n2%2==0) n2>>=1,s++; res=pw(base,n2,n); if((res==1)||(res==n-1)) return 1; while(s--) { res=mul(res,res,n); if(res==n-1) return 1; } return 0; // n is not a strong pseudo prime } bool isprime(const long long &n) { if(n==2) return true; if(n<2 || n%2==0) return false; for(int i=0;i<12&&BASE[i]<n;i++){ if(!check(n,BASE[i])) return false; } return true; } bool minp[maxn]; LL p[maxn]; void sieve(){ for(int i=2;i<maxn;i++){ if(!minp[i]){ minp[i]=1; p[++p[0]]=i; } for(int j=1;j<=p[0]&&(LL)i*p[j]<maxn;j++){ minp[i*p[j]]=1; if(i%p[j]==0) break; } } } vector<LL>ans; int k; void print(){ sort(ans.begin(),ans.end()); ans.erase(unique(ans.begin(),ans.end()),ans.end()); for(int i=0;i<k&&i<ans.size();i++) printf("%lld%c",ans[i]," \n"[i+1==k]); exit(0); } LL bound=1e7; void dfs(LL phin,int id,LL curn){ // if(id)cerr<<phin<<" "<<id<<" "<<p[id]<<" "<<curn<<endl; if(phin>bound&&isprime(phin+1)){ dfs(1,id-1,curn*(phin+1)); //ans.push_back(curn*(phin+1)); //if(ans.size()==k)print(); //return ; } if(phin==1){ ans.push_back(curn); if(curn%2) ans.push_back(curn*2); //if(ans.size()==k)print(); return ; } if(!id)return ; if(phin%(p[id]-1)==0){ LL pk=p[id]; for(int i=1;;i++){ if(phin%((pk/p[id])*(p[id]-1))==0) dfs(phin/(pk/p[id])/(p[id]-1),id-1,curn*pk); else break; pk*=p[id]; } dfs(phin,id-1,curn); }else{ while(id>=1&&phin%(p[id]-1)!=0) id--; dfs(phin,id,curn); } } LL _phi(LL n){ LL ans=1; for(LL i=2;i*i<=n;i++){ if(n%i==0){ ans*=i-1; n/=i; while(n%i==0)ans=ans*i,n/=i; } } if(n>1)ans=ans*(n-1); return ans; } int bf(int phin){ for(int i=1;i<1e5;i++) if(_phi(i)==phin){ return i; } return -1; } LL calc(LL phin){ dfs(phin,p[0],1); sort(ans.begin(),ans.end()); if(ans.empty()||ans[0]>(1LL<<31)) return -1; return ans[0]; } int main(){ sieve(); //cerr<<_phi(141538889898505LL)<<endl; LL phin; cin>>phin>>k; // bound=(LL)sqrt(phin)+2; //cin>>k; dfs(phin,p[0],1); print(); //cout<<bf(phin)<<endl; /*sort(ans.begin(),ans.end()); if(ans.empty()||ans[0]>(1LL<<31))puts("-1"); else cout<<ans[0]<<endl;*/ //print(); return 0; }
[BZOJ4804]结果是 $\sum_{i=1}^n F(i){\lfloor \frac{n}{i} \rfloor}^2 $ 其中 $F(n)=\sum_{d|n}\varphi(d)\mu(\frac{n}{d})$
[BZOJ4805]裸杜教筛
[BZOJ4806]dp[i][j][k]表示前i行有j列炮的数量为0,k列为1,转移也很简单
[BZOJ4807]C(n,m) mod 10**50,质因数分解,高精度
[BZOJ4808]最大独立集,染色流流流
[BZOJ4809]位运算加速暴力