題目意思:給出l,r,p,求區間[l,r]之間有多少數的最小質因子是p。
資料範圍:1<=l<=r<=1000000000,1<=p<=1000000000
考慮設\(f(x,y)\)表示從1到\(x\)中最小質因子為\(y\)的數的個數,則有
\[f(x,y)=\lfloor \rfloor -\sum_^ \rfloor,y-1)} f(\lfloor \rfloor,k)
\]其中\(pri\)為質數集合,特別的,當\(y \notin pri\)時,此函式返回0
#include#define int long long
using namespace std;
const int n=1e7+1;
int l,r,p;
int isprime(int x)
int calc(int x,int p)
int read()
while(isdigit(ch))
return x*f;
}signed main()
題目意思:定義乙個可重正整數集合是好的,當且僅當該集合中任意兩個數之和不為質數。給你乙個序列,希望你從中取出乙個盡量大的好的集合。
資料範圍:n<=3000,1<=hi<=100000
我們知道,除了2以外的質數都是奇數,而只有奇數+偶數=奇數
則我們考慮將集合分為奇數和偶數,將和為質數的兩個數連邊,然後網路流最小割
在此之前特判一下2的情況就行了
#includeusing namespace std;
const int n=3003;
const int m=2e5+1;
const int inf=1947483647;
int ans,n,cnt=1,head[n],a[n],cur[n];
int s,t,pos,tot,vis[m],pri[m];
struct edgeedge[n*n];
void prepare() }}
void ins(int x,int y,int z)
int read()
while(isdigit(ch))
return x*f;
}namespace networkflow
for(int i=head[x];i;i=edge[i].nxt)
if(!dep[edge[i].to]&&edge[i].v)
}return dep[t];
} int dfs(int x,int rest)
}return flow;
} int dinic()
return maxflow; }}
int main()if(a[i]==1) pos=i;
}s=n+1,t=s+1;
for(int i=1;i<=n;i++)
} int maxmatch=networkflow::dinic();
printf("%d\n",n-maxmatch);
return 0;
}
題目意思:給定乙個長度為n的數列ai,求乙個最長的ai的子串行bi,滿足對於任意i,\(b_i\)=\(b_\)
qaq
#includeusing namespace std;
const int n=1e5+1;
int n,ans=1,a[n];
int read()
while(isdigit(ch))
return x*f;
}int main()printf("%d\n",max(ans,re));
return 0;
}
杭二集訓 質數
標籤 哥德 猜想 質數 prime 題目描述 將1 n分成盡可能少的集合,使得每個集合的元素和均為質數。輸入資料 一行乙個正整數n。輸出資料 第一行乙個正整數m表示最少集合數,第二行n個 1,m 中的整數,第i個整數表示i在第幾個集合中。若有多種方案輸出任意一種即可。若無解輸出 1。樣例輸入 8 樣...
第二週集訓總結
這一周下來主要是對上乙個週看的前三章做乙個 的實現,雖然 有模板和例題,但是仍然有幾個演算法沒有完成實現。對於第一章的內容,我關注的重點是二進位制轉化和二分,在這週的最後幾天也有狂刷二分的題 雖然並沒有刷太多道 但是對二分的題目還是不太熟悉。昨天的最後一道題,一開始並沒有想到用二分,但是在別人拿到一...
8 1 集訓日記
今天看了有關容斥原理的幾篇部落格。容斥原理的基本思想是 先不考慮重疊的情況,把所有物件的數目求出,然後再把計數時重複計算的數目排斥出去,使得計算的結果既無遺漏又無重複。首先是乙個經典的互素問題 hdoj 4135 co prime 題目大意是 給定a,b,n,求區間 a,b 中與n互素的數的個數。思...