1. 程式人生 > >NOIP複賽複習(三)檔案讀寫與數論模板

NOIP複賽複習(三)檔案讀寫與數論模板

檔案讀入讀出

假設題目名為“add”,那麼資料夾名為“add”c++程式名為“add.cpp”,讀入檔名為“add.in”,輸出檔名為“add.out”。四個的拼寫均不可有誤,包括大小寫差異。千萬不要除錯後就忘記修改檔案讀入讀出了。 

#include<cstdio>

int main(){

   freopen("add.in","r",stdin);//read

   freopen("add.out","w",stdout);//write

}




數論演算法

1、線性篩

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

using namespace std;

const int maxn=200005;

int prime[maxn];

bool not_prime[maxn];

int main()

{

    int n,cnt=0;

   scanf("%d",&n);

   memset(not_prime,0,sizeof(not_prime));

   not_prime[1]=true;

    for(inti=2;i<=n;i++)

    {

       if(!not_prime[i])

           prime[++cnt]=i;

        for(intj=1;j<=cnt;j++)

        {

           if(prime[j]*i>n)    break;

           not_prime[prime[j]*i]=true;

            if(i%prime[j]==0) break;

        }

    }

    for(inti=1;i<=cnt;i++)

       printf("%d ",prime[i]);

    return 0;

}

 

2、埃氏篩

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<cstring>

using namespace std;

inline int read()

{

    char c;

    c=getchar();

   for(;c>'9'||c<'0';c=getchar());

    int sum=0;

   for(;c<='9'&&c>='0';c=getchar())sum=sum*10+c-48;

    return sum;

}

int n,m;

bool f[10010000];

int main()

{

   n=read(),m=read();

   memset(f,true,sizeof(f));

   f[0]=f[1]=false;

    for(inti=2;i<=n;i++)

    if(f[i])

    for(intj=2;i*j<=n;f[i*j]=false,j++);

    for(inti=1;i<=m;i++)

    {

        int x;

        x=read();

       if(f[x])printf("Yes\n");

        elseprintf("No\n");

    }

    return 0;

}

 

3、拓展歐幾里得演算法

#include<iostream>

#include<cstdio>

#include<cstdlib>

#include<algorithm>

using namespace std;

int x,y;

int exgcd(int a,int b)

{

    if(!b)

    {

        x=1;

        y=0;

        return a;

    }

    else

    {

        int t;

        intd=exgcd(b,a%b);

        t=x;

        x=y;

        y=t-a/b*x;

        return d;

    }

}

int main()

{

    int a,b;

   scanf("%d%d",&a,&b);

    exgcd(a,b);

// cout<<__gcd(a,b)<<endl;

   cout<<x<<" "<<y<<endl;

    return 0;

}

 

4GCD&LCM

#include<iostream>

#include<cstdio>

#include<cstdlib>

using namespace std;

int gcd(int a,int b)

{

    if(!b) returna;

    else returngcd(b,a%b);

}

int lcm(int a,int b)

{

    returna/gcd(a,b)*b;

}

int main()

{

    int a,b;

   scanf("%d%d",&a,&b);

   cout<<gcd(a,b)<<" "<<lcm(a,b)<<endl;

    return 0;

}

 

5、分解質因數

#include<iostream>

#include<cstdio>

#include<cstdlib>

using namespace std;

int main()

{

    long long n;

   scanf("%lld",&n);

    for(long longi=2;i<=n;i++)

    {

        while(n!=i)

        {

           if(n%i==0)

            {

                printf("%lld*",i);

               n=n/i;             

            }

            elsebreak;

        }

    }

   printf("%lld",n);

    return 0;

}

 

6、大數翻倍法

#include<iostream>

#include<cstdio>

#include<cstdlib>

using namespace std;

int a[233],mo[233];

int gcd(int a,int b)

相關推薦

NOIP複賽複習檔案數論模板

檔案讀入讀出 假設題目名為“add”,那麼資料夾名為“add”,c++程式名為“add.cpp”,讀入檔名為“add.in”,輸出檔名為“add.out”。四個的拼寫均不可有誤,包括大小寫差異。千萬不要除錯後就忘記修改檔案讀入讀出了。  #include<cstdio&

NOIP複賽複習程式對拍圖論模板

程式對拍 所謂“對拍”,顧名思義,就是讓兩者相互比對。所謂“兩者”,一是你要測試的程式,二是一個答案在該程式在一定範圍(時間/空間)內結果必定正確的程式(一般是用暴力求解的程式)。對拍一般需要造資料程式(data.exe),保證正確性的暴力對拍程式(test.exe)與測試程式(以moo.e

NOIP複賽複習外掛高精度模板

讀入輸出掛 讀入輸出掛就是逐個字元地讀入資料,從而讓讀入更加快速。輸出掛的原理也是一樣的,都是通過將輸出數字變成輸出字元以加快速度。當然輸入輸出外掛一般用在大量輸入輸出的情況下,這樣價效比才高一些,否則得不償失。 void Rd(int &res){  &nbs

NOIP複賽複習十三圖論演算法鞏固提高

一、圖的儲存   1、鄰接矩陣   假設有n個節點,建立一個n×n的矩陣,第i號節點能到達第j號節點就將[i][j]標記為1(有權值標記為權值),  樣例如下圖:   /*無向圖,無權值*/ i

NOIP複賽複習怎樣才能拿到高分?

摘要 考場策略和程式測試是資訊學競賽中非常重要的環節,很多優秀的選手在很多比賽中總是會在這兩個環節上犯下這樣和那樣的錯誤,導致得到的分數和實力不成正比,最後留下了無盡的遺憾。本文將探討一些這兩個環節上值得注意的地方,提出一些可行的方法,分享一些經驗,以此希望幫助選手們在比賽中發揮水平,減少失

NOIP複賽複習如何設計測試資料?

有些同學參加一次資訊學比賽之後,自我感覺非常不錯,但是測評結果成績卻並不理想。造成這種情況的原因有多方面,但是我認為其中不可忽視的一大原因就是在寫完程式之後,他們並不知道如何保證程式的正確性。在這裡,我就這個問題提出一點自己的看法。 先從考試的時間分配問題講起。很多同學覺得考試時間很充分,N

NOIP複賽複習STL演算法樹結構模板

STL演算法 STL 演算法是一些模板函式,提供了相當多的有用演算法和操作,從簡單如for_each(遍歷)到複雜如stable_sort(穩定排序),標頭檔案是:#include <algorithm>。常用STL 演算法庫包括:sort快速排序演算法、二分

NOIP複賽複習STL容器字串模板

STL容器 STL 容器是一些模板類,提供了多種組織資料的常用方法。常用的STL容器包括pair(組合)、list(列表,類似於連結串列)、vector(向量,類似於陣列)、priority_queue(優先佇列)、set(集合)、map(對映)、stack(棧)等,通過模板的引數

NOIP複賽複習演算法分析排序模板

演算法分析 演算法分析的目的是預測演算法所需的資源,如計算時間(CPU 消耗)、記憶體空間(RAM 消耗)、通訊時間(頻寬消耗)等,以及預測演算法的執行時間,即在給定輸入規模時,所執行的基本運算元量,或者稱為演算法複雜度。 演算法的執行時間取決於輸入的資料特徵,輸入

NOIP複賽複習競賽環境注意事項

一、比賽不提供紙質試題,只提供電子版試題檔案。 該檔案壓縮包儲存在計算機桌面上。監考人公佈密碼後,選手自行解密試題。 試題解壓密碼會影響一個人的心情,一定要一次輸對,注意大小寫,不要邊輸入邊檢查,要對自己有自信。 二、江蘇複賽選手上機可自選windows或linux作業系統。

NOIP複賽複習常見問題常用策略

數學類問題 1. 精度處理(高精度、實數處理、各種浮點型別處理方法) 2. 組合數學問題(斐波那契數列、第二類數、卡特蘭數、Polya原理、排列組合計數、加法原理與乘法原理) 3. 進位制問題(特定二進位制串的統計、二分查詢、利用二進位制進行路徑、狀

NOIP專題複習 狀壓DP學習筆記

其實並不是三,已經走了很多專題了。 之後慢慢填坑吧。 我覺得學普通的DP已經救不了我了。 發覺似乎NOIP狀壓蠻裸的(flag立的飛起),於是學一波。 其實在下作為一隻蒟蒻,認為狀壓DP屬於很好理解但不太好寫的型別。 還是從經典例題互不侵犯開始。

python學習檔案

三種模式介紹:#r只讀模式,預設的,未指定模式時為只讀 r 開啟檔案不存在的話,會報錯 ; r+ 讀寫模式 #寫模式 w 會將原來檔案中的內容清空 開啟檔案不存在的話,會新建一個檔案 w+ 寫讀模式,雖然能讀,但是因為把檔案內容清空了,讀到的就是空 #追加模式 a+ 追加讀模式

Spring Boot學習筆記檔案上傳訪問靜態檔案

檔案上傳 寫法和Spring MVC沒啥區別看起來 package org.test.Controll; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.we

AQS系列- ReentrantReadWriteLock鎖的加鎖

前言     前兩篇我們講述了ReentrantLock的加鎖釋放鎖過程,相對而言比較簡單,本篇進入深水區,看看ReentrantReadWriteLock-讀寫鎖的加鎖過程是如何實現的,繼續拜讀老Lea凌厲的程式碼風。 一、讀寫鎖的類圖     讀鎖就是共享鎖,而寫鎖

NOIP複賽複習十五動態規劃鞏固提高

經典例題:數字金字塔(Luogu 1216)  寫一個程式來查詢從最高點到底部任意處結束的路徑,使路徑經過數字的和最大。每一步可以走到左下方的點也可以到達右下方的點。 我們現在這裡討論搜尋如何實現:  狀態:目前在第x行第y列 

NOIP複賽複習十四字串演算法鞏固提高

一、Trie樹   1.定義: 通過字串建成一棵樹,這棵樹的節點個數一定是最少的。例如:4個字串"ab","abc","bd","dda"對應的trie樹如下: 其中紅色節點表示存在一個字串是以這個點結尾的。  一個性質:在樹上,兩個點u,

NOIP複賽複習十二數論演算法鞏固提高

一、數論    1.數   整數、自然數(大於等於0的整數)、正整數(大於0的整數)、負整數、非負整數、非正整數、非零整數、奇數偶數。   2.整除性   設a,b∈Z,如果存在c∈Z並且a=bc,則

NOIP複賽複習十一基礎演算法鞏固提高

一、倍增演算法:   定義:用f[i][j]表示從i位置出發的2j個位置的資訊綜合(狀態) 一個小小的問題:為什麼是2j而不是3j,5j,…?因為,假設為kj,整個演算法的時間複雜度為(k-1)logk,當k=2時,時間複雜度最小。 這個演算法的三個應用:

C++ 菜鳥之路 Vector 的使用 csv檔案

Vector 的基本用法 在c++中,vector 是一個十分有用的容器, 相比一般的陣列可一方便的進行插入和刪除, 可以方便的查詢相關的資訊和清空。 (1)標頭檔案#include<vector>. (2)建立vector物件,ve