日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

CodeForce 237C Primes on Interval(二分+ 素数筛法)

發(fā)布時(shí)間:2025/3/16 编程问答 23 豆豆
生活随笔 收集整理的這篇文章主要介紹了 CodeForce 237C Primes on Interval(二分+ 素数筛法) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

題目鏈接:http://codeforces.com/problemset/problem/237/C

Primes on Interval time limit per test 1 second memory limit per test 256 megabytes

You've decided to carry out a survey in the theory of prime numbers. Let us remind you that a prime number is a positive integer that has exactly two distinct positive integer divisors.

Consider positive integers?a,?a?+?1,?...,?b?(a?≤?b). You want to find the minimum integer?l?(1?≤?l?≤?b?-?a?+?1)?such that for any integer?x(a?≤?x?≤?b?-?l?+?1)?among?l?integers?x,?x?+?1,?...,?x?+?l?-?1?there are at least?k?prime numbers.

Find and print the required minimum?l. If no value?l?meets the described limitations, print -1.

Input

A single line contains three space-separated integers?a,?b,?k?(1?≤?a,?b,?k?≤?106;?a?≤?b).

Output

In a single line print a single integer — the required minimum?l. If there's no solution, print -1.

Examples input 2 4 2 output 3 input 6 13 1 output 4 input 1 4 3 output -1
題意:給出三個(gè)正整數(shù)a、b、k,求最小的L(1?≤?L≤?b?-?a?+?1)滿足對于[a, b-L+1]中的任意一個(gè)數(shù)X,在[X, X+L-1]這L個(gè)數(shù)中,至少有k個(gè)素?cái)?shù)。如果不存在滿足條件的L,輸出-1.

解題思路:首先判斷是否有解,即判斷當(dāng)L=b-a+1時(shí)是否有解,因此時(shí)L最大,若此時(shí)都無解,則肯定無解。

若有解,則1?≤?L≤?b?-?a?+?1,二分求最小的L即可。

#include <cstdio> #include <iostream> #include <cstring> #include <set> #include <cmath> using namespace std; typedef long long LL; const int MaxN = 1e6 + 2; int prime[MaxN], vis[MaxN], cnt[MaxN]; int pri_cnt;//篩法求素?cái)?shù) void get_prime() {int m = (int)sqrt(1000000 + 1);pri_cnt = 0;memset(vis, 0, sizeof(vis));vis[0] = 1;vis[1] = 1;for(int i = 2; i <= m; ++i) {if(!vis[i]) {prime[pri_cnt++] = i;for(int j = i * i; j <= 1000005;j += i)vis[j] = 1;}} }//預(yù)處理求出1-1000000所有的素?cái)?shù),保存在prime數(shù)組中,并用cnt[i]數(shù)組記錄從0到i有多少個(gè)素?cái)?shù) void Init() {get_prime();cnt[0] = 0;for(int i = 1; i <= 1000000; ++i) {if(!vis[i]) cnt[i] = cnt[i-1] + 1;else cnt[i] = cnt[i-1];} }// 判斷當(dāng)前的l是否滿足題目要求 bool Check(int a, int b, int k, int l) {int r = b - l + 1;for(int i = a; i <= r; ++i) {if(cnt[i + l - 1] - cnt[i - 1] >= k)continue;elsereturn false;}return true; }// 二分求最小的L int get_ans(int a, int b, int k) {int L = 1, R = b - a + 1, mid;while(L <= R) {mid = (L + R) / 2;if(Check(a, b, k, mid))R = mid - 1;elseL = mid + 1;}return L; }int main() {Init();int a, b, k;while(~scanf("%d%d%d", &a, &b, &k)) {if(!Check(a, b, k, b - a + 1))printf("-1\n");elseprintf("%d\n", get_ans(a, b, k));}return 0; }

總結(jié)

以上是生活随笔為你收集整理的CodeForce 237C Primes on Interval(二分+ 素数筛法)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。