素數篩
今天突然想到一種另一種理解素數篩的角度
對於每個數的質因數分解是 x=p1^a1 * p2^a2 * pk^ak
對於一個合數來說
1. k=1,a1>1
2.k>1,a1>=1
那麽對於第一種情況,x=p1^a1 只會被 p1^(a1-1)篩去,對於第二種情況,若a1=1,那麽會被p2^a2 * pk^ak篩去,否則只會被p1^(a1-1) * p2^a2 * pk^ak篩去
說了半天跟沒說一樣= =,貼下bin神的代碼
void getprime()
{
memset(prime,0,sizeof prime);
for(int i=2;i<=maxn;i++)
{
if(!prime[i]) prime[++prime[0]]=i;
for(int j=1;j<=prime[0]&&prime[j]<=maxn/i;j++)
{
prime[prime[j]*i]=1;
if(i%prime[j]==0)break;
}
}
}
素數篩
相關推薦
HDU6069 Multi-4 素數篩
ans shee spa rim padding cnblogs long text col 被這一道題打崩,打表的題目啊~~~~類似大區間的素數篩法(POJ2689)題目鏈接約數和定理:d(n) = (a1 + 1)(a2 + 1)……(an + 1){ai 指的是 質因
素數篩法
for 都去 n) break true class ++ i++ int 一、埃式篩法 埃式篩法的核心思想是從2到n枚舉,當我們找到一個質數時,枚舉它所有的倍數,因為這些倍數都不可能是質數。 for(int i=2; i<=n; i++) {
[luoguP1835] 素數密度_NOI導刊2011提高(04)(素數篩)
[1] targe .org get can clas div http ret 傳送門 數據辣麽大,怎麽搞?(L≤R≤2147483647) 註意到R-L≤1000000 所以可以直接篩R-L區間內的數, 但是需要用已知的小的素數篩, R
poj 2689 區間素數篩
cto tween integer pre ber sel math enc all The branch of mathematics called number theory is about properties of numbers. One of the ar
LightOJ - 1197 素數篩
-m urn scan pri spa turn nal name clu 深夜無事可幹啊 #include<bits/stdc++.h> using namespace std; const int maxn = 1e6+11; typedef long lo
POJ2689:Prime Distance(大數區間素數篩)
possible lib ios rop sel poj art eve led The branch of mathematics called number theory is about properties of numbers. One of the areas
LightOJ 1197(區間素數篩)
put 區間素數篩 scan reac out problem ber mar can Help Hanzo Amakusa, the evil spiritual leader has captured the beautiful princess Nakururu. T
ACM_哥德巴赫猜想(素數篩)
ont other turn desc 簡單 rim 全部 == pan 哥德巴赫猜想 Time Limit: 2000/1000ms (Java/Others) Problem Description: 哥德巴赫猜想大概是這麽一回事:“偶數(>=4) ==
POJ3292 Semi-prime H-numbers [數論,素數篩]
pos lib The bool sed out soft product -s 題目傳送門 Semi-prime H-numbers Time Limit: 1000MS Memory Limit: 65536K Total Su
素數篩 + 前綴和 模板
namespace 模板 color efi bits return pos space sin 素數篩 + 前綴和 模板 1 #include <bits/stdc++.h> 2 #define ll long long int 3 #defi
素數篩
i++ 素數 get 質因數 rime ems oid 否則 1-1 今天突然想到一種另一種理解素數篩的角度 對於每個數的質因數分解是 x=p1^a1 * p2^a2 * pk^ak 對於一個合數來說 1. k=1,a1>1 2.k>1,a1>=1 那麽
線性素數篩
oid ont mem rim 為什麽 ++ ima 範圍 一個數 int prime[MAXN], tag[MAXN]; void Get_Prime() { Mem0(tag); int cnt = 0; for(int i = 2;i <
Codeforces Round #511 (Div. 2)-C - Enlarge GCD (素數篩)
iostream rim c++11 原來 bug ros blocks typename long 傳送門:http://codeforces.com/contest/1047/problem/C 題意: 給定n個數,問最少要去掉幾個數,使得剩下的數gcd 大於原
LightOJ 1197 Help Hanzo(區間素數篩法)
cstring mem 區間素數篩 ios ret 最大 help pre rime #include<cstdio> #include<cstring> #include<iostream> #include<algorithm
Codeforces851D Arpa and a list of numbers(素數篩)
/* 素數篩 有n個數,可以進行兩種操作: 1,刪除一個數,花費x 2,某個數的值+1,花費y 現在想讓序列所有數的gcd>1,求最小花費。(全部刪除也合法) 列舉數列中所有的素數i,如果某個數a[j]不是i的倍數, 將其刪除花費為v1=x,增加到是i倍數花費為v2=(i-a[j]
簡單易懂的素數篩法
首先提一句,這是我第一次寫部落格,有不好的地方請在評論處提出來,我會認真改進。 如果你需要求1~n個數中有幾個素數,你會去怎麼求??? 方法一: 最直接想到的是先列舉1~n中每一個數字,再寫一個函式pd(x)來判斷第x個數是否是素數,再輸出。 #include<
佇列求解素數篩
這是我們資料結構的作業,先看要求吧: 程式設計實現佇列類,要求包括基本變數和基本操作,也沒啥。 佇列中兩個變數,頭節點和尾節點。每個節點不僅要有next節點值,還要有last節點。 然後insert函式和pop函式,一個插入一個刪除。不過這個要分幾種情況,當佇列為空,或者只有一
演算法之素數篩法
分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!  
[素數篩] 求n的不同因數之和能組成的連續1~x的x ZOJ4040
Number Theory Time Limit: 1 Second Memory Limit: 65536 KB Given an integer , calculate the smalle
[數論] 線性素數篩
採用素數篩篩選出1~n之間的素數 首先準備大小為n的陣列flag[n]經行標記, 標記為1的是不符合的, 如果沒有被標記的數字, 則放進vector陣列中, vector數組裡面都是素數, 然後在開始遍歷該vector陣列, 將i*倍的元素進行標記, 即 flag[i*prime[j]]=1,