1. 程式人生 > >算術基本定理(唯一分解定理 -- 分解素因子)

算術基本定理(唯一分解定理 -- 分解素因子)

算術基本定理:

任何大於1的自然數,都可以唯一分解成有限個質數的乘積:

FZU - 1075 這是一道裸題,程式碼可行性不考,反正網上大佬都是這麼敲的。。

程式碼實現分解素因子:
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;

int main()
{
    int t;
    int n;
    int a[205];
    int cas = 1;
    scanf("%d",&t);
    while(t --)
    {
        scanf("%d",&n);
        int cnt = 0;
        for(int i = 2; i <= n; i ++)
        {
            while(n % i == 0)
            {
                a[cnt ++] = i;
                n /= i;
            }
        }
        printf("%d",a[0]);
        for(int i = 1; i < cnt; i ++)
        {
            printf("*%d",a[i]);
        }   
        printf("\n");
    }
    return 0;
}

然後在做另一道題的時候,發現這樣做會tle,另一個大佬敲了類似這樣的程式碼,快多了,可行性依舊不考,反正ac。。

#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<vector>
#include<set>
#include<map>
#include<queue>
#include<cmath>
using namespace std;

int main()
{
    int t;
    int n;
    int a[205];
    int cas = 1;
    scanf("%d",&t);
    while(t --)
    {
        scanf("%d",&n);
        int cnt = 0;
        for(int i = 2; i * i <= n; i ++)
        {
            while(n % i == 0)
            {
                a[cnt ++] = i;
                n /= i;
            }
        }
        if(n != 1) a[cnt ++] = n;
        printf("%d",a[0]);
        for(int i = 1; i < cnt; i ++)
        {
            printf("*%d",a[i]);
        }   
        printf("\n");
    }
    return 0;
}
求解多個數的質因子:
#include<iostream>
#include<vector>
#include<algorithm>
#include<string.h>
using namespace std;
int visited[100010];
vector<int>a[100010];
void init()
{
    int i,j;
    for(i=0;i<100010;i++)
       a[i].clear();//vector的清空
    memset(visited,0,sizeof(visited));
    for(i=2;i<=100000;i++)
    {
        if(visited[i]==0)//i是素數這是可以保證的
        {
            a[i].push_back(i);
            for(j=i+i;j<=100000;j+=i)//篩選素數,其實這種方法沒以前那種素數法快,但是這裡用來求一個數的質因子就比較好了
            {
                visited[j]=1;
                a[j].push_back(i);
            }
        }
    }
}
int main()
{
    int i,j;
    init();
    for(i=0;i<=50;i++)
    {
        printf("%d:",i);
        for(j=0;j<a[i].size();j++)
            printf("%d ",a[i][j]);
        printf("\n");
    }
    return 0;
}

相關推薦

算術基本定理唯一分解定理

                                           算術基本定理 算術基本定理: 每個大於1的正整數N都可以表示成素數之積的形式 :  N=p1^a1*p2^a2*p3^a3...(pi代表素數,ai代表指數) d(n)是n的正因子

定理算術基本定理唯一分解定理

大蒟蒻來水貼了! 算術基本定理(唯一分解定理) 一句話:      任何大於1的自然數,都可以唯一分解成有限個質數的乘積 例如對於大於1的自然數n, 這裡Pi均為質數,其指數ai是正

算術基本定理唯一分解定理 -- 分解因子

算術基本定理:任何大於1的自然數,都可以唯一分解成有限個質數的乘積:FZU - 1075 這是一道裸題,程式碼可行性不考,反正網上大佬都是這麼敲的。。程式碼實現分解素因子:#include<ios

算數基本原理唯一分解定理

唯一分解定理: 任意一個大於0的正整數都能被表示成若干個素數的乘積且表示方法是唯一的;整理可以將相同素數的合併 X=p1^a1*p2^a2……pn^an; p1..pn 為素數 數X的因子數

數論18——反演定理莫比烏斯反演

技術分享 滿足 urn spa isp name 角速度 我們 組成 莫比烏斯反演也是反演定理的一種 既然我們已經學了二項式反演定理 那莫比烏斯反演定理與二項式反演定理一樣,不求甚解,只求會用 莫比烏斯反演長下面這個樣子(=?ω?=) d|n,表示

HDU Diophantus of Alexandria 分解因子

Diophantus of Alexandria was an egypt mathematician living in Alexandria. He was one of the first mathematicians to study equations where variables we

Math數論-分解因子

JATC's math teacher always gives the class some interesting math problems so that they don't get bored. Today the problem is as follows. Given an inte

Wilson定理一個判斷素數的簡單方法

Wilson定理;對於一個任意整數n>1,當且僅當n是一個素數時,(n-1)!+1能夠被n整除。 演算法如下: function Wilson(n) {//當且僅當n>1且n是素數時,返回true if((n-1)!+1) mode n==0 then r

POJ 1811 Prime Test大素數判斷和因子分解

題目連結: 題目大意: •給出一個N(2<=N<2^54)如果是素數,輸出Prime,否則輸出N的最小素因子。 思路:(miller素數判斷&&pollar_rho大數分解) 模板題 kuangbin的模板 資料比較大,只能先用Miller_R

盧卡斯定理十分鐘帶你看懂

在開始之前我們先介紹3個定理: 1.乘法逆元 如果ax≡1 (mod p),且gcd(a,p)=1(a與p互質),則稱a關於模p的乘法逆元為x。 2.費馬小定理: 3.擴充套件歐幾里得 已知整數a、b,擴充套件歐幾里得演算法可以在求得a、b的最大公

約數定理約數個數定理,約束和定理

約數個數定理: 對於一個大於1正整數n可以分解質因數: 則n的正約數的個數就是 。 其中a1、a2、a3…ak是p1、p2、p3,…pk的指數。 定理簡證: 首先同上,n可以分解質因數:n=p1^a1×p2^a2×p3^a3*…*pk^ak, 由約

滲透測試基本流程針對工作中的滲透測試

封裝 測試的 編寫 pro 滲透測試 log 方法 相對 image 這裏介紹的滲透測試流程主要是針對工作中的,因此僅供參考! &wmap;滲透測試就是通過模擬惡意攻擊者的技術和方法,挫敗目標系統安全控制措施,取得訪問控制權,並發現具備業務影響後果安全隱患的一種安

Kafka Shell基本命令包括topic的增刪改查

pre table kafka tool for del 生產 scribe 風險 本節內容: 創建kafka topic 查看所有topic列表 查看指定topic信息 控制臺向topic生產數據 控制臺消費topic的數據 查看topic某分區偏移量最大(小)值 增加

ID基本操作標尺,參考線,網格5.11

5.1 style 圖片 右鍵 目標 span pan shift 鼠標 參考線:標尺參考線,分欄參考線,出血參考線。在創建參考線之前確保標尺和參考線都可見。並且選中正確的跨頁和頁面作為目標, “版面”“創建參考線”可以輸入數值創建參考線。 跨頁參考線的創建:拖動參考線時鼠

ID基本操作在框架內處理文本5.28

alt 文本 符號 bubuko http 文檔 mage 選中 特殊符號 1.可以直接拖入文檔,word,excel,rtf,還可以選中文字,導出文本。 2.批量把一段文字改為另一段。還可以改特殊符號。定義範圍。 ID基本操作(在框架內處理文本)5.28

git基本命令基於廖雪峰的git教程

建立版本庫(在合適的位置): $ mkdir learngit(目錄名) $ cd learngit(檔名) 顯示當前目錄: $ pwd 將目錄變成Git可以管理的倉庫: $ git init 將檔案新增到倉庫: $ git add <file> 將檔

影象處理之影象基本變化平移、縮放、旋轉Octave實現

在模式識別及計算機視覺中,要經常進行影象的變化。 例如:在識別手寫數字中,我們可能在廣泛應用中要求所有的圖片都是20*20這麼好的規格。所以,我們就需要進行縮放來達到目的。 今天來總結下學到的影象的基本變換。 首先我們計 (w,v) (w,v)為源影象的

關於git的使用 — 建立倉庫,本地倉庫與遠端倉庫的基本互動上傳,下載,更新

建立本地倉庫 通過git init命令把這個目錄變成Git可以管理的倉庫 *本地倉庫與遠端倉庫連線 1.生成金鑰對 大多數 Git 伺服器都會選擇使用 SSH 公鑰來進行授權。系統中的每個使用者都必須提供一個公鑰用於授權,沒有的話就要生成一個。生成公鑰的過

Java MongoDB基本操作查詢、刪除、更新等

正在持續更新... MongoDB中的資料 { "_id": ObjectId("57c43caed4c63d7e39b5dc48"), "name": "張三", "age": 15, "arr": [1,2,3], "arrOb

Shell基本命令[記住]一個man搞定所有

先來兩個基礎技能:shell下命令列補全和萬用字元。 Tab 鍵具有檔名補全功能,單擊補全,雙擊列出檔案列表。同樣的功能使用與命令列補全。 萬用字元  * 匹配任意長度字串 ? 匹配一個字串 [ ]