
简单数论
stdwal
天演在化,功成在学。知海无涯,见花问道。
展开
-
数论-快速幂
快速幂算法通过递归减小幂运算的规模。long int Pow(long int X, unsigned int N){ if (N == 0) { return 1; }// if (N == 1) {// return X;// } if (!(N % 2)) { //N为偶数原创 2016-03-25 20:22:10 · 291 阅读 · 0 评论 -
埃拉托色尼(Eratosthenes)筛法
筛选法求素数#include #include using namespace std;const int MAXN = 1200;int A[MAXN];int L[MAXN];//sieve prime listvoid Sieve(int n){ int p; for (p = 2; p < n; p++) A[p] = p;原创 2016-03-25 13:57:46 · 829 阅读 · 0 评论 -
数论-素数判定
用于快速判断一个数是否为素数。bool isPrime(int num){ if (num == 2 || num == 3) return true; if (num % 6 != 1 && num % 6 != 5) return false; for (int i = 5; i * i <= num; i += 6原创 2016-03-25 14:03:48 · 416 阅读 · 0 评论 -
数论-斐波那契数列
斐波那契数列可以由递归,迭代以及数学计算得到。#include #include using namespace std;int f[1000];int Fib1(int n){ if (n <= 1) { return n; } else return Fib1(n-1)+Fib1(n-2);}int Fib2(i原创 2016-03-25 14:13:05 · 349 阅读 · 0 评论 -
简单数论-Gcd
欧几里德算法是最早的算法,用辗转相除法求最大公因数。#include using namespace std;//Gcd(m, n) == Gcd(n, m mod n)//Gcd(m, 0) == mint Gcd(int m, int n){ while (n != 0) { int r = m % n; m = n;原创 2016-03-25 14:01:22 · 584 阅读 · 0 评论 -
POJ3641-Pseudoprime numbers
题目给出两个数p, a,要求根据费马小定理检验p是不是个伪素数。用快速幂来做。另外,不能直接将a^p == a(mod p)化成a^p-1 == 1(mod p)来做,因为转换的条件是a不是p的倍数。(贡献一wa)#include bool isprime(int n) { for (int i = 2; i * i <= n; i++) { if (n %原创 2016-07-22 16:24:02 · 214 阅读 · 0 评论 -
POJ1995-Raising Modulo Numbers
使用模运算定律和快速幂即可。#include long long mod_pow(long long x, long long n, long long mod) { long long res = 1; while (n > 0) { if (n & 1) { res = res * x % mod; }原创 2016-07-22 16:56:36 · 321 阅读 · 0 评论 -
Ural1118-Nontrivial Numbers
很少切数论的题,因为它过于抽象,数学要求很高….唉说到底还是菜….题目大意 首先定义trivial number,是一个自然数的所有小于它本身的因子之和除以它本身所得到的那个数。然后给定某个区间,要求在这个区间内寻找出那个trivial number最小的数字。大致思路 先筛一遍区间内的素数,然后从大到小寻找最大的那一个素数,这个数一定是区间内trivial number最小的数。用时0.原创 2016-12-01 22:57:34 · 556 阅读 · 0 评论