1. 程式人生 > >ACM數論中的常見的模板和結論

ACM數論中的常見的模板和結論

1:最大公約數的求法

歐幾里得演算法實現。遞迴實現

 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<iostream>
 5 using namespace std;
 6 __int64 gcd(__int64 y,__int64 x)
 7 {
 8     __int64 ans=0;
 9     if(x==0)
10      ans=y;
11      else
12      ans=gcd(x,y%x);
13      return ans;
14 } 15 int main() 16 { 17 int t; 18 __int64 A,B; 19 scanf("%d",&t); 20 scanf("%I64d %I64d",&A,&B); 21 if(A>B) 22 swap(A,B); 23 printf("%I64d\n",gcd(A,B)); 24 } 25 return 0; 26 }

2:最小公倍數和最大公約數的關係

設n和m的最大公約數是p,最小公倍數是q,那麼有下列的關係

p*q=n*m,所以求兩數的最大公約數可以轉換成求求兩數的最大公約數再根據兩者之間的關係來求最小公倍數= =

3:素數的判定

1> 試商法

int is_prime()
{
for(int i=2;i*i<=n;i++)
{
    if(n%i==0)
    return 0;
} 
return 1;
}

2>篩選法

陣列a[]存的是1000000以內的素數

int get_prme()
{
    int k=0; 
    for(int i=2;i<=1000000;i++)
    {
        if(!chick[i])
        a[k++]=i;
        for(int j=0;j<k;j++)
        {
            if(i*a[j]>1000000
) break; chick[a[j]*i]=1; if(i%a[j]==0) break; } } return 0; } //篩選法求素數

3:分解一個數的質因子,其中a[]存的是素數,f[]存的是某個數的質因子= =

int get_fx(int x)
{
     int j,k=0;
     for( j=0;a[j]*a[j]<=x;j++) 
     {
         if(x%a[j]==0)
        f[ k++]=a[j];
         while(x%a[j]==0)
         {
          x=x/a[j];
          f[k++]=a[j];
        }
        if(x==1)
        break; 
     }
     if(x!=1)
     f[k++]=x;
     return 0
}

4:能被11整除的數他滿足(SUM奇-SUM偶)的絕對值能被11整除= =

5:快速冪演算法

 1 int qPow(int A, int n)
 2 {
 3     if (n == 0) return 1;
 4     int rslt = 1;
 5 
 6     while (n)
 7     {
 8         if (n & 1) //如果n為奇數
 9         {
10             rslt *= A%10;
11         }
12         A *= A;
13         n >>= 1;
14     }
15     return rslt%10;
16 }

運用快速冪演算法可以把求n^n的複雜度講到logn,

6:求n^n的個位數

因為是各位數沒有進位,通過打表發現n的各位數是0,1,2,5,6,7的話無論是多少次冪他的個位數都是他自己本身= =

然後我們看其他的

2:4 6 8 2

3:3 9 7 1

4:6 4 6 1

8:4 2 6 8

9:1 9 1 9

上面的數陣表示當n的個位數是2,3,4,8,9是n次冪之後的結果變化,然後因為只有四個數的變化我們考慮n%4,而且n%4的結果只會是0,2...

所以綜上所述我們可以得出下面的陣列

1 int data[10][4]={{0,0,0,0},{1,1,1,1},{6,6,4,4},{3,3,7,7},{6,4,6,4},{5,5,5,5,},{6,6,6,6},{7,7,3,3},{6,6,4,4},{1,9,1,9}};

下面給出完整程式碼

#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int data[10][4]={{0,0,0,0},{1,1,1,1},{6,6,4,4},{3,3,7,7},{6,4,6,4},{5,5,5,5,},{6,6,6,6},{7,7,3,3},{6,6,4,4},{1,9,1,9}};
int main()
{
    int n;
    while(scanf("%d",&n)!=EOF)
    printf("%d\n",data[n%10][n%4]);
    return 0;
} 

參考部落格http://m.blog.csdn.net/blog/chenminghe271/6766472

7:n的階乘後面的零

通過打表可以得出結論n的階乘後面的零呈現下面的規律

0 0,1 0,2 0,3 0,4 0,5 1,6 1,7 1,8 1,9 1,10 2,11 2,13 2,14 2,15 3,16 3,17 3,18 3,19 3,20 4;ps(11 2表示11的階乘後面有2個0)每五個數0的數就會+1

我們進行25的打表的是發現25!後面有6個0,而24的階乘後面只有4個零。這裡發生突變了,不是平常的+1,而是+2。而且有關5的次方冪的數都會發生突變,。

那個突變的規律就是1+n(n表示m這個數可以用5^m來表示。。。

#include<stdio.h>
#include<string.h> 
#include<algorithm>
#include<iostream>
#include<stack>
#include<set>
#include<queue>
#include<math.h>
#define maxn 100000
#define long long LL 
using namespace std;
int main()
{
    int n;
    scanf("%d",&n);
    int sum=0;
    int i=1;
    int ans=0;
    while(sum<n)
    {
           ans+=n/pow(5,i);
           sum=pow(5,i);
           i++;
    }
    printf("%d\n",ans);
    return 0;
}

 8:快速冪取餘

快速冪取餘其實就是在求快速冪的時候每一步都取餘

#include<stdio.h>
#include<string.h>
#include<algorithm>
#include<iostream>
using namespace std;
int qpow(int x,int a,int p)
{
    int ans=1;
    x=x%p;
    while(a>0)
    {
        if(a&1)
        ans=(ans*x)%p;
        x=(x*x)%p;
        a>>=1;
    }
    return ans;
}
int main()
{
    int A,B,C;
    scanf("%d %d %d",&A,&B,&C);
    printf("%d\n",qpow(A,B,C));
    return 0;
}//求A^B%C

相關推薦

ACM數論常見模板結論

1:最大公約數的求法 歐幾里得演算法實現。遞迴實現 1 #include<stdio.h> 2 #include<string.h> 3 #include<algorithm> 4 #include<iostream>

Django模板分頁

con lock turn if條件 ndb temp name ... simple 模板     在Templates中添加母版:        - 母版...html     母版(master.html)中可變化的地方加入: {%block content%}

CSS常見屬性值、盒子定位

一、CSS中常見屬性和值 1、字型屬性 1> 字型家族:font-family  (宋體、楷體...) 2> 字型風格:font-style    (normal普通、italic斜體) 3> 字型大小:font-size 4> 字型加粗:font-weight:bold 2、控制文

【C#winform程式設計常見問題方法】

一、 tabpage怎麼視窗全屏顯示 將tabpage的Dock屬性改成Fill 二、tabpage怎麼自適應窗體大小,比例縮放 將tabpage的Anchor屬性改為上下左右 三、不允許視窗放大或者縮小 更改MaximizeBox和

ACM數論一些簡單結論程式設計小技巧總結

前言 最近被數論的模運算卡了一發。。稍微總結一下最近用到的數論結論 另外,get了一些實現的技巧,也一起記一下~免得忘了~ 數論簡單結論 n = p(1) ^ num(1) * p(2) ^

PHP 面向對象常見關鍵字使用(final、static、constinstanceof)

對象的引用 符號 存在 stat true 函數 php 面向對象 his 對象引用 PHP 面向對象中常見關鍵字的使用:   1、final :final關鍵字可以加在類或者類中方法之前,但是不能使用final標識成員屬性。     作用: 使用final標識的類,不能被

ACM常見錯誤對應表

memory exce href .com err 錯誤 put log ole 因為經常寫錯題,找了個這個看看。。。 傳送門:http://www.cnblogs.com/ZouCharming/p/3868844.html 我太垃圾了。。。 我出現過的錯誤: Wrong

為什麽 c++函數模板模板的 聲明與定義需要放到一起?

color code 我們 ack 二進制 通過 如果 之前 類型 將模板的聲明與定義寫在一起實在很不優雅。嘗試用“傳統”方法,及在.h文件裏聲明,在.cpp文件裏定義, 然後在main函數裏包含.h頭文件,這樣會報鏈接錯誤。why!!!!!!!!!!!!! 這是因為函數模

Makefile常見的自動變量含義

makefile info 自動 vmm var p s xms userinfo href 劫V3W71v9QGW貝膳http://jz.docin.com/cjwjy04096 1姥樸5KAQ訪顯39http://shufang.docin.com/fjqbs11

Thymeleaf 模板 在spring boot 的引用應用

end text www. bean template har ica ngs sta Thymeleaf是一個java類庫,他是一個xml/xhtml/html5的模板引擎和Struts框架的freemarker模板類似,可以作為mvc的web應用的view層。 Thy

VC++C語言常見數據類型轉換為字符串的方法

char* 北京 相同 字符指針 ascii bst sdn sprint 出現 1。短整型(int) itoa(i,temp,10);///將i轉換為字符串放入temp中,最後一個數字表示十進制 itoa(i,temp,2); ///按二進制方式轉換 2。長整型(long

flask學習(十):模板訪問模型字典的屬性

src info .com 分享圖片 prop 學習 pan ram 使用 訪問模型中的屬性或者是字典,可以通過{{params.property}}的形式,或者是使用{{params[‘age‘]}}這樣的形式 flask學習(十):模板中訪問模型和字典的屬性

網絡請求常見的加密機制加密算法理解

還原 查找 判斷 客戶 只需要 tle 共享 www. .cn 請求安全性: 服務器端在接收到請求的時候,要主動鑒別該請求是否有效,是否可接受。   token:已登陸用戶的識別碼     解決的問題:用戶調用接口時,不用每次都帶上用戶名和密碼,避免了頻繁在網絡中傳輸密碼被

資料分析過程常見的一些指標概念解釋(使用者生命週期分析)

一些使用者生命週期分析中經常遇到的一些名詞的解釋。參考新增連結描述 會話 會話就是session,也就是使用者的一次開啟和啟動。會話是行為資料記錄的必要維度,會話的準確性直接影響對使用者行為的解讀以及部分關鍵統計指標的準確性。 判定: 從開啟產品到關閉產品視為一次會話;

HtmlCSS在瀏覽器常見的相容性問題處理

1,居中問題   格里的內容,IE預設為居中,而FF預設為左對齊,可以嘗試增加程式碼: margin: 0 auto; 2,高度問題 兩上下排列或巢狀的格,上面的格設定高度(高度),如果DIV裡的實際內容大於所設高度,在FF中會出現兩個格重疊的現象;

Flask常見的資料庫定義資料庫遷移

from datetime import datetime from werkzeug.security import generate_password_hash, check_password_hash from info import constants from . import db

那些年,面試常見的資料結構基礎演算法題(下)

前言 這是 資料結構和演算法面試題系列的下半部分,這部分主要是演算法類 包括二分查詢、排序演算法、遞迴演算法、隨機演算法、揹包問題、數字問題等演算法相關內容。本系列完整程式碼在 github 建了個倉庫,所有程式碼都重新整理和做了一些基本的測試,程式碼倉庫地址在這裡: shishujuan/dsalg

Spark專案實戰-實際專案常見的優化點-分配更多的資源調節並行度

1、分配更多的資源 (1)分配哪些資源?executor、cpu per executor、memory per executor、driver memory。 (2)在哪裡分配這些資源?在我們在生產環境中,提交spark作業時,用的spark-submit shell指

PHP陣列XML相互轉換的函式,微信常見的Sign生成函式

//陣列轉Xml function ArrToXml($arr) { if(!is_array($arr) || count($arr) == 0) return ''; $xml = "<xml>"; foreach ($arr as $key=>$val) {

網路請求常見的加密機制加密演算法理解

請求安全性: 伺服器端在接收到請求的時候,要主動鑑別該請求是否有效,是否可接受。   token:已登陸使用者的識別碼     解決的問題:使用者呼叫介面時,不用每次都帶上使用者名稱和密碼,避免了頻繁在網路中傳輸密碼被截獲的風險。     使用場景:使用者登入系統時傳入使用者名稱和密碼,伺服器校驗成功之後,根