BestCoder#19 HDU5108(质因数分解法)

Alexandra and Prime Numbers

Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)

Total Submission(s): 1614    Accepted Submission(s): 193

Problem Description

Alexandra has a little brother. He is new to programming. One day he is solving the following problem: Given an positive integer N, judge whether N is prime.
The problem above is quite easy, so Alexandra gave him a new task: Given a positive integer N, find the minimal positive integer M, such that N/M is prime. If such M doesn‘t exist, output 0.
Help him!

Input

There are multiple test cases (no more than 1,000). Each case contains only one positive integer N.
N≤1,000,000,000.
Number of cases with N>1,000,000 is no more than 100.

Output

For each case, output the requested M, or output 0 if no solution exists.

Sample Input

3
4
5
6

Sample Output

1
2
1
2

【题目简述】:本题让我们输入一个正整数N,然后求出一最小的正整数M使得 N/M 是一个素数。

【分析】:刚刚拿到这题的第一感觉就是用素数的相关操作去处理这道题,然后超时但还是不死心,不停的优化。但本题和其他的素数不一样的地方就是这道题它求的是N/M,所以既然涉及到除法,其实我们还是用另外一种方法去处理这道题,那就是质因数分解。

质因数分解:就是把一个合数分解成几个素数相乘的形式。例如:

48 = 2*2*2*3

58 = 2*3*3*3

由此我们可以将N一直除以一个比它自己本身小的质数,按照质因数分解的方法,不停的进行分解,我们要找到一个分解出的最大的素数P,因为只有这样,我们才能使得M最小。

代码如下:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#include <stack>
#include <queue>
#include <string>
#include <vector>
#include <set>
#include <map>
#include <bitset>
#include <cassert>
using namespace std;
typedef long long LL;
const int N = 50;
int n;

void work() {
    int i , m , x = 0;
    m = n;
    for (i = 2 ; i * i <= n ; ++ i) {
        if (n % i == 0) {
            while (n % i == 0)
                n /= i;
            x = max(x , i);
        }
    }
    if (n > 1)
        x = max(x , n);
    printf("%d\n" , x ? m / x : 0);
}

int main() {
    while (~scanf("%d",&n))
        work();
    return 0;
}
时间: 2024-10-06 00:10:41

BestCoder#19 HDU5108(质因数分解法)的相关文章

Miiler-Robin素数测试与Pollard-Rho大数分解法

板题 Miiler-Robin素数测试 目前已知分解质因数以及检测质数确定性方法就只能\(sqrt{n}\)试除 但是我们可以基于大量测试的随机算法而有大把握说明一个数是质数 Miler-Robin素数测试基于以下两个原理: 费马小定理 即我们耳熟能详的 对于质数\(p\) \[a^{p - 1} \equiv 1 \pmod p\] 二次探测原理 对于质数\(p\),如果存在\(x\)满足 \[x^2 \equiv 1 \pmod p\] 那么\(x\)只能是\(1\)或者\(p - 1\)

经验模态分解法简析 (转)

http://blog.sina.com.cn/s/blog_55954cfb0102e9y2.html 美国工程院士黄锷博士于1998年提出的一种信号分析方法:重点是黄博士的具有创新性的经验模态分解(Empirical Mode Decomposition)即EMD法,它是一种自适应的数据处理或挖掘方法,非常适合非线性,非平稳时间序列的处理,本质上是对数据序列或信号的平稳化处理. 1:关于时间序列平稳性的一般理解: 所谓时间序列的平稳性,一般指宽平稳,即时间序列的均值和方差为与时间无关的常数,

推荐系统——隐因子的矩阵分解法

在新手接触推荐系统这个领域时,遇到第一个理解起来比较困难的就是协同过滤法.那么如果这时候百度的话,得到最多的是奇异值分解法,即(SVD).SVD的作用大致是将一个矩阵分解为三个矩阵相乘的形式.如果运用在推荐系统中,首先我们将我们的训练集表示成矩阵的形式,这里我们以movielen数据集为例.这个数据集包含了用户对电影的评分.那么矩阵形式大致为:   movie1 movie2 movie3 moive4 user1 1       user2 2     3 user3   5 4   user

系统架构正交分解法

[Architecture] 系统架构正交分解法 [Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大蓝图去做分析设计.先前在InfoQ上看到一篇文章:「亿级用户下的新浪微博平台架构 - 卫向军」,在这篇文章里使用正交分解法,来分析设计新浪微博平台的系统架构. 透过正交分解法这样表格式的条列与分解,可以让开发人员清楚理解每个象限的关注点,进而去理解与

[Architecture] 系统架构正交分解法

[Architecture] 系统架构正交分解法 前言 随着企业成长,支持企业业务的软件,也会越来越庞大与复杂.当系统复杂到一定程度,开发人员会发现很多系统架构的设计细节,很难有条理.有组织的用一张大蓝图去做分析设计.先前在InfoQ上看到一篇文章:「亿级用户下的新浪微博平台架构 - 卫向军」,在这篇文章里,使用正交分解法,来分析设计新浪微博平台的系统架构. 透过正交分解法这样表格式的条列与分解,可以让开发人员清楚理解每个象限的关注点,进而去理解与组织整个系统架构所使用到的框架技术.本篇文章介绍

Guass列选主元消去法和三角分解法

最近数值计算学了Guass列主消元法和三角分解法解线性方程组,具体原理如下: 1.Guass列选主元消去法对于AX =B 1).消元过程:将(A|B)进行变换为,其中是上三角矩阵.即: k从1到n-1 a. 列选主元 选取第k列中绝对值最大元素作为主元. b. 换行 c. 归一化 d. 消元 2).回代过程:由解出. 2.三角分解法(Doolittle分解) 将A分解为如下形式 由矩阵乘法原理 a.计算U的第一行,再计算L的第一列 b.设已求出U的1至r-1行,L的1至r-1列.先计算U的第r行

线性方程组的分解法——LU分解法

1.代码 %%LU分解法 function LUDM = LU_Decomposition_method(A,b) global n;global B;global U;global L;global M; [n,n] = size(A); B = [A,b]; R_A = rank(A);R_B = rank(B); if R_A ~= R_B disp('方程无解'); elseif (R_A == R_B) && (R_A == n) disp('此方程有唯一解'); M = LU_

开机时自动启动的AutoHotkey脚本 2019年07月08日19时06分

;;; 开机时自动启动的AutoHotkey脚本;; 此脚本修改时间 2019年06月18日20时48分;; 计时器创建代码段 -----------------------------------------------------------------------------------------; SetTimer可以模拟多线程从而不影响主线程的流畅执行; 请在SciTE4AutoHotkey中选中单词并按快捷键F12跳转到函数定义处; 绿色免安装程序,统一都分类保存在本地磁盘D分区文

线性方程组的分解法——列主元消去法

1.代码 %%列主元消去法 function ECPE = Elimination_of_column_pivot_entries(M,b) global n; [n,n] = size(M); B =[M,b]; R_A = rank(M);R_B = rank(B); if R_A ~= R_B disp('方程无解'); elseif (R_A == R_B)&&(R_A == n) disp('此方程有唯一解'); for k = 1:n-1 B = Column_pivot_tr