1. 程式人生 > >打表解素數問題(篩選法)

打表解素數問題(篩選法)

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