zoukankan      html  css  js  c++  java
  • CSP.ac #60

    质数求和(T1-20)
    如果看不了请登入,如果还看不了就是你没去qbxt

    很简单的一道区间筛的题目
    题目大体意思:给你L,R,求[L,R] 的素数之和
    对于 100%的数据,1<=L<=R<=10^9,R-L<=1000

    #include <cstdio>
    #include <iostream>
    #include <string>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    
    #define int long long
    #define db double
    #define rr register
    
    #define inf 1e9
    
    using namespace std;
    
    const int MAXN = 1e6 + 5;
    
    inline int read() {
    	int s = 0, f = 0;
    	char ch = getchar();
    	while (!isdigit(ch)) {f |= ch == '-'; ch = getchar();}
    	while (isdigit(ch)) {s = s * 10 + (ch ^ 48); ch = getchar();}
    	return f ? -s : s;
    }
    
    int l, r, tot, ans;
    
    int prime[MAXN], a[MAXN], vis[MAXN];
    
    inline int orao() {
    	for (rr int i = 2; i <= 50000; i++) {
    		if (!vis[i]) 
    			prime[++tot] = i;
    		for (rr int j = 1; j <= tot; j++) {
    			if (prime[j] * i > 50000)
    				break;
    			vis[prime[j] * i] = 1;
    			if (i % prime[j] == 0)
    				break;
    		}
    	}
    }
    
    signed main() {
    	orao();
    	l = read();
    	r = read();
    	for (rr int i = 1; i <= tot; i++) {
    		int q = max(2 * 1ll, (l - 1ll) / prime[i] + 1ll) * prime[i];
    		for (rr int j = q; j <= r; j += prime[i]) 
    			if (j - l >= 0)  
    				a[j - l] = 1;
    	}
    	for (rr int i = 0; i <= r - l; i++)
    		if (!a[i])
    			ans += i + l;
    	cout << ans;
    }
    
  • 相关阅读:
    ZOJ Bookcase
    C*++ Calculations
    STL <cctype>
    线段树单点更新+区间更新
    ZOJ Supermarket
    STL <cassert>
    算法导论<二>
    MV Maker [DP]
    LIS 最长有序子序列(递增/递减/非递增/非递减)
    LIS
  • 原文地址:https://www.cnblogs.com/lieberdq/p/12792398.html
Copyright © 2011-2022 走看看