打表解素數問題(篩選法)
1、最大素因子
#include<stdio.h>
#define max 1000010
int a[max]={0};
void num_prime()
{
int i,j,x=0;
for(i=2;i<max;i++)
{
if(!a[i])
{
x++;
for(j=i;j<max;j=j+i) //素數的整倍數的最大素因子可能是該素數
a[j]=x; //更新素數對應的出現的次序
}
}
}
int main()
{
num_prime();
int n;
while(scanf("%d",&n)!=EOF)
printf("%d\n",a[n]);
return 0;
}
2、快速查詢素數
#include <stdio.h>
#include <stdlib.h>
int a[2000001];
void seek()
{
int i,j;
for(i=2;i<1000000;i++)
{
if(!a[i])//關鍵!已經賦值過1就不需要重複遍歷了,否則就超時!!!
for(j=2;i*j<=2000000;j++)
a[i*j] = 1;//i*j意味著此數肯定不是素數!
}
}
int main()
{
seek();
int n,i;
while(scanf("%d",&n)!=EOF && n)
{
for(i=2;i<=n;i++)
{
if(!a[i])
printf("%d ",i);
}
printf("\n");
}
return 0;
}
今天第一次用篩選法解決大數問題,覺得這個方法很靈性啊,是的給賦個值,不是的為零,最後把為零的輸出就完了。
相關推薦
打表解素數問題(篩選法)
1、最大素因子 #include<stdio.h> #define max 1000010 int a[max]={0}; void num_prime() { int i,j,x=0; for(i=2;i<max;i++) {
演算法提高 素數求和 藍橋杯 (篩選法)
/* 演算法提高 素數求和 問題描述 輸入一個自然數n,求小於等於n的素數之和樣例輸入2樣例輸出2資料規模和約定 測試樣例保證 2 <= n <= 2,000,000*/#include <stdio.h>#include <stdlib
POJ-1316(類素數篩選法)
分析:如果按照定義對每個數進行判斷則需要O(N*N)的時間,但用類似篩素數的思想,我們可以mark出所有不滿足條件的,自然而然的就可以輸出滿足條件的了,時間複雜度是O(Nlog10(N)) #include <cstdio> const int MAX_N
篩選法求素數(三種)
第一種:剔除2 3 4 5 6 ... ... 的倍數 在i從2開始的增一變化過程中,剔除i的倍數即j*i(j是大於等於2的自然數,j的上限是問題規模M) 為了減少重複步驟,可以每當i遞增到等於第一個沒有被剔除的(素)數時再剔除該數的倍數, 重複上述過程至i到達問題規模
#數論# 快速分解質因數的技巧 && 篩法求素數(快速篩)
快速分解質因數 在做題時經常遇到要分解質因數,那麼如何快速分解質因數呢? 在用篩法求素數時,我們使用線性篩的方法,並在每次篩的過程中,記錄下每個數的最小質因數。那麼在分解質因數的時候,只需要不斷除以當前數的最小質因數,就可以快速得到分解的質因數了。 給出一個簡單的例子,比如我們要求
#數論# 快速分解質因數的技巧 && 篩法求素數(快速篩)
快速分解質因數 在做題時經常遇到要分解質因數,那麼如何快速分解質因數呢? 在用篩法求素數時,我們使用線性篩的方法,並在每次篩的過程中,記錄下每個數的最小質因數。那麼在分解質因數的時候,只需要不斷除以當前數的最小質因數,就可以快速得到分解的質因數了。 給出一個簡單的例子,
程序模擬洗撲克牌(算法)
相交 arr 基礎上 contain 關心 人才 ray 面試 eat 前一段時間找實習,騰訊面試中一輪面試官被問到這個題目,我回答了以下解法中的第一種,太搓了。直接遭面試官歧視了,回來搜了搜,發現一種更好的解法(以下解法中的另外一種)。今天偶爾發現解法2事實上有毛病。
二叉搜索樹的隨機化插入和伸展插入操作(平攤法)
新節點 div fine mod and sta std splay ins 源碼例如以下: #include <stdlib.h> #include <stdio.h> //#define Key int #define hl h->l
Java核心類庫-IO-打印流(PrintStream/PrintWriter)
int div leo obj clas 打印流 println 不換行 pan 打印流,打印數據的,打印流只能是輸出流: PrintStream:字節打印流。 PrintWriter:字符打印流。 對於PrintWriter來說,當啟用字段刷新之後 PrintWrite
Python學習筆記19(算法)
while bdc bubble == append 算法 ef7 -a += 1.二分查找 只能用二分查找查找有序列表 def bin_search(data,val): #data為被查找的列表,val是要查找的值 low = 0 high = l
取尺法(算法)
cep iostream turn 判斷 規律 最短 tab class 左右 1 /*常用的解題技巧:尺取法 2 尺取法:顧名思義,像尺子一樣取一段,借用挑戰書上面的話說,尺取法通常是對數組保存一對下標,即所選取的區間的左右端點,然後根據實際情況不斷地推進區間左右
[LeetCode] 679. 24 Game(回溯法)
desc ann 兩個 java lan sof vision res unary 傳送門 Description You have 4 cards each containing a number from 1 to 9. You need to judge wh
兩隊選手每隊5人進行一對一的比賽(算法)
bsp println public 比賽 依次 string out for 變量 4. 有兩隊選手每隊5人進行一對一的比賽,甲隊為A、B、C、D、E,乙隊為J、K、L、M、N,經過抽簽決定比賽對手名單。規定A不和J比賽, M不和D及E比賽。列出所有可能的比賽名單。 提示
素數(25以內)
double ++ 常量 pub 素數 for 表達式 使用 true #include<stdio.h> int main() { const int maxnumber=25; int is_prime[maxnumber]; in
找犯人——蠻力法(算法)
body 至少 clu a+b pos nbsp div sin main 某地刑偵大隊對涉及六個嫌疑人的一樁疑案進行分析: (1)A、B至少有一人作案;(2)A、E、F三人中至少有兩人參與作案;(3)A、D不可能是同案犯;(4)B、C或同時作案,或與本案無關;(5)C、D
c# winform 實現打印功能(未完)
ble preview raw using ntp review winform setup print 1.打印控件介紹(Document屬性設置為PrintDocument1;ShowDialog()方法顯示對話窗) PrintDialog控件(打印會話):用於選擇打印
洛谷P1337 【[JSOI2004]平衡點 / 吊打XXX】(模擬退火)
最小 com flash www. show over 接受 http 一個點 洛谷題目傳送門 很可惜,充滿Mo力的Mo擬退火並不是正解。不過這是一道最適合開始入手Mo擬退火的好題。 對模擬退火還不是很清楚的可以看一下 這道題還真和能量有點關系。達到平衡穩態的時候,物體的總
【題解】 bzoj1207: [HNOI2004]打鼴鼠 (動態規劃)
def math clas amp online code 直接 tro ID bzoj1207,懶得復制,戳我戳我 Solution: 挺傻逼的一個\(dp\),直接推就好了 這題在bzoj上的數據有點問題,題目保證每個時間點不會出現在同一位置兩個地鼠,然而他有= =(
?機器視覺算法與應用讀書筆記(算法)
問題: isp SQ prime 取出 三個點 出圖 第一個 如何 1.數據結構 2.圖像增強 1. 灰度值變換 2. 輻射標定 3. 圖像平滑 1. 時域去噪法 2. 空間域去噪法 均值濾波器 遞歸線性濾波器:將上次計算得到的值帶入到下次的值中 缺點:噪聲並不能被全部消
Gym - 100989G (二分法)
ati imu algorithm left 求平均值 print ron output can There are K hours left before Agent Mahone leaves Amman! Hammouri doesn‘t like how thing