1. 程式人生 > >Vijos P1786 質因數分解【質因數分解】

Vijos P1786 質因數分解【質因數分解】

背景

NOIP2012普及組第一題

描述

已知正整數n是兩個不同的質數的乘積試求出較大的那個質數。

格式

輸入格式

輸入只有一行包含一個正整數n。

輸出格式

輸出只有一行包含一個正整數p, 即較大的那個質數。

樣例1

樣例輸入1

21

樣例輸出1

7

限制

1S

提示

【資料範圍】 對於60%的資料,6 ≤ n ≤ 1000。 對於100%的資料,6 ≤ n ≤ 2*10的9次方

來源

NOIP2012普及組第一題


問題分析

如果一個數n是兩個素數的乘積,那麼其中一個素數必然小於或等於n的開平方。

程式說明

這裡給出兩種程式。

先做的第二種,追求時間上快,ACM程式一般都需要這麼做。轉念一想,試一下最簡單的做法,沒想到也通過了。

題記

一般而言,想把程式做的快一些,不僅需要付出空間的代價,而且手續繁雜。

參考連結:(略)

AC的C++程式如下:

#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    long n;

    cin >> n;

    if(n % 2 == 0)
        cout << n / 2 << endl;
    else {
        int start = sqrt(n) / 2;
        start = start * 2 + 1;

        for(int i=start; i>=3; i-=2) {
            if(n % i == 0) {
                cout << n / i << endl;
            }
        }
    }

    return 0;
}


AC的C++程式如下:

#include <iostream>

using namespace std;

const int N = 44721;        // 2*10的9次方的開方
long prime[N+2] = {0, 0, 1};

// 計算整數開方函式
long sqrt(long n)
{
    long a, b, m;
    a = 1;
    b = n;
    for(;;) {
        m = (a + b) / 2;
        if (m == a || m == b)
            return m;
        if (m * m > n)
            b = m;
        else
            a = m;
    }
}

// 篩選法求最小的n個素數
int esieve(long prime[], int n)
{
    for(int i=3; i<=n; i++) {
        prime[i++] = 1;
        prime[i] = 0;
    }

    for(int i=3; i*i<=n; i+=2) {
        if(prime[i]) {
            for(int j=i+i; j<=n; j+=i)    //進行篩選
                prime[j] = 0;
        }
    }

    // 整理素數放在陣列的前面,小於或等於n的素數共k個
    int k = 0;
    for(int i=2; i<=n; i++)
        if(prime[i])
            prime[k++] = i;

    return k;
}

int main()
{
    long n;
    cin >> n;
    int m = esieve(prime, sqrt(n));
    for(int i=m-1; i>=0; i--)
        if(n % prime[i] == 0) {
            cout << n / prime[i] << endl;
            break;
        }

    return 0;
}


相關推薦

Vijos P1786 質因數分解質因數分解

背景 NOIP2012普及組第一題 描述 已知正整數n是兩個不同的質數的乘積試求出較大的那個質數。 格式 輸入格式 輸入只有一行包含一個正整數n。 輸出格式 輸出只有一行包含一個正整數p, 即較大的那個質數。 樣例1 樣例輸入1 21 樣例輸出1 7 限制 1S

Vijos 1691-輸油管道問題中位數

某石油公司計劃建造一條由東向西的主輸油管道。該管道要穿過一個有n 口油井的油田。從每口油井都要有一條輸油管道沿最短路經(或南或北)與主管道相連。如果給定n口油井的位置,即它們的x 座標(東西向)和y 座標(南北向),應如何確定主管道的最優位置,即使各油井到主管道之間的輸油管道長度總和最小的位置? 程式設計任

Vijos 1242-郵局問題經典DP

一些村莊建在一條筆直的高速公路邊上,我們用一條座標軸來描述這條公路,每個村莊的座標都是整數,沒有兩個村莊的座標相同。兩個村莊的距離定義為座標之差的絕對值。我們需要在某些村莊建立郵局。使每個村莊使用與它距離最近的郵局,建立郵局的原則是:所有村莊到各自使用的郵局的距離總和最小。 資料規模:1<=村莊數&l

藍橋杯BASIC-16 分解質因數水題

問題描述   求出區間[a,b]中所有整數的質因數分解。 輸入格式   輸入兩個整數a,b。 輸出格式   每行輸出一個數的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是從小到大的)(具體可看樣例) 樣例輸入 3 10 樣例輸出

HDU3988 大整數質因數分解Miller_Rabin 進行素數判定+Pollard_rho對整數進行因數分解

iSea is tired of writing the story of Harry Potter, so, lucky you, solving the following problem is enough.  Input The first line contains

程式14 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5

#define _CRT_SECURE_NO_WARNINGS #include <stdio.h> /* 【程式14】 題目:將一個正整數分解質因數。例如:輸入90, 打印出90 = 2 * 3 * 3 * 5。 【分析】 就是從2到自己,一一除過去 */ #if 0 int main

c語言分解質因數

/******************************  *輸入一個整數,並分解質因數  *流程:(1)如果為1和2直接輸出  *(2):偶數進入do迴圈,防止因為i的自增而出錯;  *(3)

(階乘的質因數分解)算組合數TOJ4111Binomial efficient

n<=10^6 m<=10^6 p=2^32 用unsigned int 可以避免取模 我寫的SB超時 階乘分解程式碼 #include <cstdio> #include <cstdlib> #include <cmath&

HDU 1695 GCD 容斥質因數分解尤拉函式

題意:給定區間[a,b]和[c,d]和k,求出x∈[a,b],y∈[c,d],使得gcd(x,y)==k的個數,給定a=c=1。 分析:對於滿足gcd(x,y)==k的x,y的值,都有x,y是k的倍數,且x,y互質。因此可以將b,d各除以k,得到的新的b,d中找出互質的對

藍橋杯分解質因數

問題描述  求出區間[a,b]中所有整數的質因數分解。輸入格式  輸入兩個整數a,b。輸出格式  每行輸出一個數的分解,形如k=a1*a2*a3...(a1<=a2<=a3...,k也是從小

模式分解無損連線&保持函式依賴

首先引入定義     無損分解指的是對關係模式分解時,原關係模型下任一合法的關係值在分解之後應能通過自然聯接運算恢復起來。反之,則稱為有損分解。   保持函式依賴的分解指的是對關係分解時,原關係的閉包與分解後關係閉包的並集相等。    

矩陣分解 QR, Householder變換

使用matlab,基於householder變化寫了QR的實現過程 1、Householder變化演算法 function [ H, v, beta ] = householder( x ) % x : inout param. x is a vector which size is n*1

簡化資料奇異值分解 SVD

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

CodeForces - 151CWin or Freeze (博弈,數學,唯一素數分解

題幹: You can't possibly imagine how cold our friends are this winter in Nvodsk! Two of them play the following game to warm up: initially a piece o

機器學習用QR分解求最小二乘法的最優閉式解

【機器學習】用QR分解求最小二乘法的最優閉式解 寫在前面 QR分解 定義 QR的求解 線性迴歸模型 用QR分解求解最優閉式解 矩陣的條

架構分析Android 視窗動畫流程分解

概述 Android的Activity主視窗或者子視窗在顯示或者退出的時候通常都有系統預設的視窗動畫, 使用者也可以自定義視窗動畫的style resource;  視窗動畫是由Android Framework中視窗管理器WindowManagerService實現的功能, 視窗

培訓題唯一分解定理應用[1] P1945

Description 質因子分解是數論中一個基本定理,見P1128。現在請你利用這個基本定理,對給定整數n,完成下列三個任務: 任務1、計算n的因數個數並由小到大輸出這些因數; 任務2、計算n的因數和; 任務3、計算1,2,…,n中與n互素的數個數:phi(n); Input 若干組資

線性代數矩陣的特徵分解、特徵值和特徵向量(eigen-decomposition, eigen-value & eigen-vector)

就像我們可以通過質因數分解來發現整數的一些內在性質一樣(12 = 2 x 2 x 3),我們也可以通過分解矩陣來發現表示成陣列元素時不明顯的函式性質。 矩陣分解有種方式,常見的有 特徵分解 SVD 分解 三角分解 特徵分解 特徵分解是使用最廣泛的

矩陣分解Python下基於Numpy的四種矩陣基本分解的實現

0x00 需求 完成課堂上講的關於矩陣分解的 · LU、 · QR(Gram-Schmidt) · Orthogonal Reduction Householder reduction Givens reduction 程式實現,

數論Minimum Sum LCM, UVa10791唯一分解定理素數篩法

唯一分解定理+素數篩法 #include<bits/stdc++.h> using namespace std; typedef long long LL; int cnt,n,prime