HDU 5942 Just a Math Problem 2016 杭州 CCPC 最大质数间隔777
Posted polya
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了HDU 5942 Just a Math Problem 2016 杭州 CCPC 最大质数间隔777相关的知识,希望对你有一定的参考价值。
#include <bits/stdc++.h> using namespace std; #define LL long long const int maxn=sqrt(2e9)+10; int p[maxn]; void getprime() { for(int i=2;i<maxn;i++) { if(!p[i])p[++p[0]]=i; for(int j=1;j<=p[0]&&p[j]<=maxn/i;j++) { p[p[j]*i]=1; if(i%p[j]==0) break; } } } vector<int> getfactor(LL x) { vector<int>q; for(int i=1,t;i*i<=x;i++) if((t=x/i)*i==x){ q.push_back(i); q.push_back(t); } return q; } const int maxm=800; vector<LL>mp[maxm]; int linker[maxm];bool used[maxm];int un; bool dfs(int u) { for(int i=0,sz=mp[u].size();i<sz;i++) { int v=mp[u][i]; if(!used[v]){ used[v]=true; if(linker[v]==-1||dfs(linker[v])){ linker[v]=u; return true; } } } return false; } int hungry() { int res=0; memset(linker,-1,sizeof linker); for(int u=0;u<un;u++) { memset(used,false,sizeof used); if(dfs(u)) res++; } return res; } int tot=0; unordered_map<int,int>idx; inline int fnd(int x) { if(idx.find(x)==idx.end()) idx[x]=tot++; return idx[x]; } void addedge(int uu,int vv) { int u=fnd(uu),v=fnd(vv); mp[u].push_back(v); mp[v].push_back(u); } int solve(LL l,LL r) { tot=0; idx.clear(); for(int i=l;i<=r;i++) { fnd(i); } un=r-l+1; for(int i=l;i<=r;i++) { vector<int> q=getfactor(i); // printf("%d :",i); for(auto &j:q){ if(j>un)continue; addedge(i,j); // printf("%d ",j); } // printf(" "); } int res=hungry(); for(int i=0;i<tot;i++) mp[i].clear(); // printf("%d %d ",res,un); return res!=un; } int main() { #ifdef shuaishuai freopen("in.txt","r",stdin); #endif // shuaishuai int t; scanf("%d",&t); // getprime(); for(int cas=1;cas<=t;cas++) { LL n,s; scanf("%lld%lld",&n,&s); LL l=max(n+1,s+1),r=n+s; int f=0; if(r-l+1>=777){ f=1; printf("Case #%d: %s ",cas,f? "No":"Yes"); continue; } f=solve(l,r); printf("Case #%d: %s ",cas,f? "No":"Yes"); } return 0; }
以上是关于HDU 5942 Just a Math Problem 2016 杭州 CCPC 最大质数间隔777的主要内容,如果未能解决你的问题,请参考以下文章