Primes on Interval
AC代碼:
#include?<cstdio>
#include?<cstring>
#include?<iostream>
#include?<algorithm>
using?namespace?std;
const?int?maxn?=?1001000;
#define??inf?(1<<29)
//上面的位運算還真心沒有看懂
//?p[i]?is?i-th?prime's?position
bool?pp[maxn]; //里面保存的是一個素數的信息
int?p[maxn]?,?cnt?=?0; //將素數保留在數組中間
int?ss[maxn]?,?tt[maxn];//在這里申請了這么多的數組我就是沒有看懂了是到底為啥
void?init()?{
????cnt?=?0;
????pp[0]?=?pp[1]?=?1;//前兩個數字都是不予考慮的
????tt[0]?=?tt[1]?=?-1;
????for(int?i=2;i<maxn;i++)?{
????????if(!pp[i])?{
????????????p[cnt++]?=?i; //這個是將素數保留在表格中間嗎?
????????????for(int?j=i+i;j<maxn;j+=i)?{
????????????????pp[j]?=?true; //這個是素數達標
????????????}
????????}
????????tt[i]?=?cnt?-?1;
????}
????for(int?i=0;i<maxn;i++)?{
????????if(!pp[i])?ss[i]?=?tt[i];
????????else?ss[i]?=?tt[i]?+?1;
????}
}
int?main()?{
????init();
????int?a?,?b?,?k;
????while(~scanf("%d%d%d"?,?&a,&b,&k))?{
????????int?s?=?ss[a]?,?t?=?tt[b];
????????int?num?=?t?-?s?+?1;
?????
????????if(num?<?k)?{//先判斷在這個區(qū)間之中里面的素數量是否達到了題目的要求,否則直//接退出
????????????printf("-1\n");
????????????continue;
????????}
????????int?ans?=?0;
????????int?tmp;
????????tmp?=?b?-?p[t-k+1]?+?1;
????????if(tmp?>?ans)?ans?=?tmp;
????????tmp?=?p[s+k-1]?-?a?+?1;
????????if(tmp?>?ans)?ans?=?tmp;
????????for(int?i=s;i+k<=t;i++)?{
????????????tmp?=?p[i+k]?-?p[i];
????????????if(tmp?>?ans)?ans?=?tmp;
????????}
????????printf("%d\n"?,?ans);
????}
????return?0;
}
//本題的主要思路是通過打表,成功后就可以比較簡單的得到結果
轉載于:https://www.cnblogs.com/tianxia2s/p/3871950.html
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的Primes on Interval的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 通用路由封装(GRE)×××配置
- 下一篇: url地址传参中文乱码处理