1. 程式人生 > >poj 3292 (字首和)

poj 3292 (字首和)

就是素數篩選,但是乘積重複的只算一個;

程式碼如下

#include<cstdio>
#include<iostream>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=1000005;
int prime[maxn];
bool is_prime[maxn];
int ans[maxn];
void solve()
{
	int p=0;
	memset(is_prime,true,sizeof(is_prime));
	for(int i=5;i<maxn;i+=4){
		if(is_prime[i]){
			prime[p++]=i;
			for(int j=2*i;j<maxn;j+=i) {
				if((j-1)%4==0) is_prime[j]=false;
			}
		}
	}
	for(int i=0;i<p;i++){
		if(prime[i]>10000) break;
		for(int j=i;j<p;j++){
			int temp=prime[i]*prime[j];
			if(temp>maxn) break;
			ans[temp]=1;
		}
	}
	for(int i=0;i<maxn;i++)
		ans[i]+=ans[i-1];
}
int main()
{
 	solve();
	int h;
	while(~scanf("%d",&h)){
		if(h==0) break;
		else printf("%d %d\n",h,ans[h]);
	}
 } 


相關推薦

poj 3292 字首

就是素數篩選,但是乘積重複的只算一個; 程式碼如下 #include<cstdio> #include<iostream> #include<cstring> #

codeforces873B Balanced Substring字首

/* 字首和 題意:給定一個01串,求0的個數和1的個數相同的子串最大長度 預處理原來的字串,1表示1,0表示-1 依次計算處理過的字串的字首和,如果某個字首和以前出現過, 那麼會對答案產生影響;如果是第一次出現,記錄下這個位置 */ #include <cstdio> #i

51nod1081 子段求和字首

/* 樹狀陣列求字首和 */ #include <cstdio> #include <iostream> #include <cstring> #include <cmath> using namespace std; typedef lo

洛谷1314 聰明的質監員二分字首

題目   洛谷1314 聰明的質監員 題解 二分+字首和 很顯然滿足二分性,隨著W的增大,Y會變小,我們要找的是一個abs(S-Y)最小的值。 一開始,我想著把abs拆開來看,討論min(W-Y)和min(Y-W)。後來發現一個更牛逼的做法,只要一次二分,因為是要與S做

鐳射炸彈字首

  1218: [HNOI2003]鐳射炸彈Time Limit: 10 Sec Memory Limit: 162 MB Description 一種新型的鐳射炸彈,可以摧毀一個邊長為R的正方形內的所有的目標。現在地圖上有n(N<=10000)個目標,用整數Xi,Yi(其值在[0,5000])表示

2018.10.02 NOIP模擬 聚會字首

描述 在成都的一條街道上,一共有 N戶人家,每個家庭有 Xi 個人,他們和諧的生活在 一起,作為全國和諧街道,他們經常會小範圍組織活動,每次活動會選擇一戶作為聚點, 並要求某些家庭參加,為了方便通知,村

2018.10.02【校內模擬】聚會字首

【描述】 在成都的一條街道上, 一共有 N 戶人家,每個家庭有 Xi 個人,他們和諧的生活在 一起,作為全國和諧街道,他們經常會小範圍組織活動,每次活動會選擇一戶作為聚點, 並要求某些家庭參加,為了方便通知,村長每次邀請位置連續的家庭。因為每戶人數不 同,每個家

PAT 甲級 1044 Shopping in Mars 字首

1044 Shopping in Mars (25 分) Shopping in Mars is quite a different experience. The Mars people pay by chained diamonds. Each diamond has a value (in

ZOJ-1704-To The Max 字首

原題: Given a two-dimensional array of positive and negative integers, a sub-rectangle is any contiguous sub-array of size 1 x 1 or g

51Nod1065 最小正子段字首

先求字首和,然後在排序,序列最小的和可能存在於相鄰的兩個數之差,關鍵在於如何判斷相鄰的兩個人能否構成序列。 比如-9 -2 8 7 6 字首和為-9 -11 -3 4 10 排序後:-11 -9 -3 -4 10 -11和-9就構不成序列,因為-9的下標在-11的前面. 當然

Codeforces 816B Karen and Coffee字首

To stay woke and attentive during classes, Karen needs some coffee! Karen, a coffee aficionado, wants to know the optimal temperature for brewing

第八屆藍橋杯 k倍區間字首

標題: k倍區間 給定一個長度為N的數列,A1, A2, ... AN,如果其中一段連續的子序列Ai, Ai+1, ... Aj(i <= j)之和是K的倍數,我們就稱這個區間[i, j]是

poj 3292 打表

題意:有類似4n+1的數(1,5,9,13,17.......),其中只有1和自己本身2個因數叫H-質數,而由2個H-質數乘積            得到的是H-合數,求0-n中,H-合數的個數。比如25=5X5 而5只有1和5這2個因數。 #include<s

Codeforces Round #501 (Div. 3) E字首

E2. Stars Drawing (Hard Edition) time limit per test 3 seconds memory limit per test 256 megabytes input standard input output sta

【ZOJ4054】2018ICPC青島賽區網路賽H Traveling on the Axis字首

題目連結 【題意】 在[0,n]中每0.5處設定一個紅綠燈,0表示紅燈,1表示綠燈,如果在4.5處有紅燈,要從4到5,就要等1s,給出初始的紅綠燈狀態,每1s會改變狀態,即由紅燈變成綠燈,或綠燈變成紅燈,然後計算圖中表達式。 【解題思路】 可以手動模擬

POJ 2018二分,區間平均數最大,字首

題目連結:http://poj.org/problem?id=2018 題意,給定一個非負序列,求長度大於F的連續子序列的平均數最大 解法:在實數上二分平均數mid,判斷a中是否有長度大於F平均數大於等

POJ 2566 Bound Found字首排序 + 尺取法

題意:對一個長度為n的數列,做k次查詢,每次查詢一個數t,求原數列中的一個子區間[l, r],使得該子區間的和的絕對值最接近t。 思路:在原數列開頭新增一個0,處理好現數列a[N]的字首和pre[N]。則原問題轉化為在字首陣列中求2個數pre[i],pre

Bound FoundPOJ-2566尺取法 and 字首

Bound Found Time Limit: 5000MS Memory Limit: 65536K Total Submissions: 4727 Accepted: 1502 Special Judge Description Signals of

【題解】洛谷P1315 [NOIP2011TG] 觀光公交字首+貪心

次元傳送門:洛谷P1315 思路 思路大概想到了 可是程式碼實現卻沒想到 所以參考題解了 D2T3的貪心果然有難度 我們考慮在每次用加速器有兩種情況 到下一個點還需要等待:以後的時間就不再影響了 到下一個點不需要等待:那麼就會影響到後面的時間直到出現情況1(或者到最後一個點) 用sum

【51nod 1103】【N的倍數】字首取餘

題目: 一個長度為N的陣列A,從A中選出若干個數,使得這些數的和是N的倍數。 例如:N = 8,陣列A包括:2 5 6 3 18 7 11 19,可以選2 6,因為2 + 6 = 8,是8的倍數。 Input 第1行:1個數N,N為陣列的長度,同時也是要求的倍數。(2 <=