数论的一点前置知识

1。唯一分解定理

  总体有三种,这里只说一种,整数的唯一分解定理。

  整数惟一分解定理亦称算术基本定理,是数论的重要定理之一。该定理断言:任何一个大于1的整数n都可以分解成若干个素因数的连乘积,如果不计各个素因数的顺序,那么这种分解是惟一的,即若n>1,则有

n = p1*p2*…*pm (1)

  其中p1≤p2≤…≤pm并满足皆为素数,可以化简为下面的式子:

其中,p1<p2<…<pk皆素数,αi(i=1,2,…,k)皆正整数,(2) 式称为n的标准分解式,又称为质因数分解式、素数幂分解式等,若(2)式成立,则n的任一正因数d都可表成

的形式,其中αi≥βi≥0 (i=1,2,…,k).利用标准分解式(可查素数幂分解表)容易写出任二正整数的最大公因数.即若有 其中αi≥0,βi≥0 (i=1,2,…,k),则gcd

  

,这里ri=min(αi,βi) (i=1,2,…,k)。

把一个给定的充分大的整数分解成它的标准分解式,不仅具有理论意义,而且具有实际应用价值,但这是一个十分困难的工作,即使借助于电子计算机也要花费惊人的时间,算术基本定理早在欧几里得(Euclid)的《几何原本》第9卷命题20中已有陈述,1801年,高斯(C.F.Gauss)又重新提出,并给出证明。

2。质因数

  质因数(素因数或质因子)在数论里是指能整除给定正整数质数。除了1以外,两个没有其他共同质因子的正整数称为互质。因为1没有质因子,1与任何正整数(包括1本身)都是互质。只有一个质因子的正整数为质数。

3。分解质因数

  把一个合数分解成若干个质因数的乘积的形式,即求质因数的过程叫做分解质因数。

分解质因数只针对合数。(分解质因数也称分解素因数)求一个数分解质因数,要从最小的质数除起,一直除到结果为质数为止。分解质因数的算式叫短除法,和除法的性质差不多,还可以用来求多个个数的公因式

代码实现:

#include "bits/stdc++.h"
using namespace std;
typedef long long ll;
int main()
{
    ll n,i;
    printf("please input a number:\n");
    cin>>n;
    cout<<n<<"=";
    for(i=2;i<=n;i++)
    while(n!=i)
    {
        if(n%i==0)
        {
            printf("%lld*",i);
            n=n/i;
        }
        else
            break;
    }
    printf("%lld\n",n);
    return 0;
}

上述方法为:Pollard Rho因数分解

1975年,John M. Pollard提出了第二种因数分解的方法,Pollard Rho快速因数分解。该算法时间复杂度为O(n^(1/4))。

将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成: 
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数你n,
 重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。

对于大数的处理,我们可以使用素数表。

a[0]=0;
int prim_reduce(int n) //整数素分解
{
    for(int i = 0; prim[i] * prim[i] <= n; ++i)
    {
        while(n % prim[i] == 0)
        {
            n /= prim[i];
            a[++a[0]]=pri[i];
        }
    }
    if(n > 1)
        a[++a[0]]=pri[i];
}

4。约数定理个数

对于一个大于1正整数n可以分解质因数

则n的正约数的个数就是

其中a1、a2、a3…ak是p1、p2、p3,…pk的指数。

原文地址:https://www.cnblogs.com/ztdf123/p/10932135.html

时间: 2024-10-16 06:27:46

数论的一点前置知识的相关文章

C++ 中有关const引用的一点小知识

在读<C++ Primer>时,发现之前对const的概念不是很清晰,只知道如何去使用,于是翻开const引用部分又阅读了一遍,发现有两点自己要注意的地方 1.const限定的对象不可以初始化非const引用 ex. 1 const int src = 512; 2 const int &ok_dest = src; //ok: 引用和初始化对象都是const 3 int &err_dest = src; //error : 引用为非const 原因很简单, src 是不可以被

学golang之前都需要哪些前置知识?

我学golang,感觉前面基础语法部分都很快能学会,但是到了goroutine,channel等后面的部分就看不懂了,是不是我学这个之前还得学习其他什么知识啊?(我有C语言基础,对于C语言里面的指针,结构体,位运算等都有所了解) 学golang之前都需要哪些前置知识? >> golang 这个答案描述的挺清楚的:http://www.goodpm.net/postreply/golang/1010000008866706/学golang之前都需要哪些前置知识.html

一点基础知识

1.肉鸡:所谓“肉鸡”是一种很形象的比喻,比喻那些可以随意被我们控制的电脑,对方可以是WINDOWS系统,也可以是UNIX/LINUX系统,可以是普通的个人电脑,也可以是大型的服务器,我们可以象操作自己的电脑那样来操作它们,而不被对方所发觉.2.木马:就是那些表面上伪装成了正常的程序,但是当这些被程序运行时,就会获取系统的整个控制权限.有很多黑客就是热中与使用木马程序来控制别人的电脑,比如灰鸽子,黑洞,PcShare等等.3.网页木马:表面上伪装成普通的网页文件或是将而已的代码直接插入到正常的网

从零写一个编译器(二):语法分析之前置知识

前言 在之前完成了词法分析之后,得到了Token流,那么接下来就是实现语法分析器来输入Token流得到抽象语法树 (Abstract Syntax Tree,AST).但是在完成这个语法分析器不像词法分析器,直接手撸就好了,还是需要一些前置的知识. 这些前置知识在之前的博文都有提起过 之前的博文目录 项目的完整代码在 C2j-Compiler 什么是语法分析? 如果我们把词法分析看成是组合单词,输出单词流,那么语法分析就可以看作是检查这些单词是不是符合语法的过程.在词法分析的时候用正则或者手工比

JavaWeb前置知识 : 动态和静态的区别、两种架构、常见状态码

JavaWeb程序设计(一) : 前置知识 1.动态网页与静态网页的区别: a.不要和是否有"动感"混为一谈. b.是否随着时间.地点.用户操作的改变而改变 (例如 : 在百度上搜索某个城市的房价) c.动态网页需要用到 服务端脚本语言(eg : JSP) 2.架构: 1.B/S (浏览器/服务端) Eg: 网页版的淘宝 2.C/S (客户端/服务端) Eg: 手机端的淘宝.QQ 3.两种架构的利弊: C/S : 优点:响应速度快,客户端界面也较为丰富. 缺点:不便于维护更新 B/S

WebAPI前置知识:HTTP与RestfulAPI

对HTTP协议的基本了解是能理解并使用RestFul风格API的基础,在了解了这些基础之后,使用各种RestFul的开发框架才能得心应手.我一开始使用WebApi的时候就因为对这些知识缺乏了解,觉得用起来各种不顺手,直到熟悉了这些HTTP的知识后,使用WebApi开发起来才觉得得心应手,我的理解里,RestFul风格的API即是对HTTP协议良好支持,实现HTTP完整语义风格的API. 在介绍这些知识之前,我需要强调一下很多人存在的一个误区:HTTP的谓词和数据传递方式.绝大多数人接触并使用的H

每天一点新知识!

今天学了一个HTML5,挺喜欢里面的下拉列表,代码是这样: <input list="one"/><datalist id="one">    <option value="one">    <option value="two">    <option value="three"></datalist> 还有拖拽事件: <div

MySQL的一点浅显知识

本人最近看了一本有关于MySQL的书籍<MySQL必知必会>,书中只写了一些基本知识,但是也基本涵盖了所有的MySQL的知识点.其余的比较高级的也只是在基础上进行扩展或者是优化,看完这本书之后,本人也有一点疑惑,所以知道的朋友帮忙解决一下 1.MySQL的引擎分类 InnoDB,MyISAM以及MEMORY等3个引擎. InnoDB是一个可靠的事务处理引擎,但是其不支持全文本搜索. MEMORY在功能上等同于MyISAM,但由于数据存储在内存中,速度很快. MyISAM是一个性能极高的引擎,它

SpringCloud学习之一前置知识理解

前提知识+相关的说明 1. 目前我们学习到最后的微服务架构SpringCloud,到我这里基本人需要大家熟悉以前的学习内容和知识,也即我默认大家已经熟悉了 SpringMVC+Spring/SpringBoot+Mybatis+Maven+git-- 不再重复讲解, 2. 本次Cloud的讲解的方式,由于我们只有2.5天,大概21种技术之多,只能挑选最重要最常用的技能给大家分享,俗称Cloud技术的五大神兽 public classDept{ private Integer id; privat