数论
文章平均质量分 90
ACdreamers
这个作者很懒,什么都没留下…
展开
-
HDU2588解析
题目:HDU2588 题意大概:给定N,M(2=M的个数。解法:数据量太大,用常规方法做是行不通的。后来看了别人的解题报告说,先找出N的约数x, 并且gcd(x,N)>= M,结果为所有N/x的欧拉函数之和。 因为x是N的约数,所以gcd(x,N)=x >= M; 设y=N/x,y的欧拉函数为小于y且与y互质的数的个数。原创 2013-01-26 15:56:56 · 3979 阅读 · 1 评论 -
HDU2608 0 or 1
题目:0 or 1 分析: 首先看T(n),通过找规律可以发现:(看了别人的解题报告才知道这部分是怎么推出来的) 仅当n为1,2,4,8,9,16,18,25,32,36,49,50,64,72,81,98,100…………的时候,T(n)%2==1; 可以发现,if(n%(i*i)==0 || n%(i*i*2)==0) => T(n)%2==1; 然原创 2013-02-06 22:50:43 · 1435 阅读 · 0 评论 -
NEFU394 素数价值
题目:素数价值 本题可以直接用结论,或者用DP做。。。哥德巴赫猜想:任何大于偶数都等于两个素数和;分类:大于2的偶数,价值为2 奇数:若是质数价值为1,若是等于两个质数之积价值是2,若是等于2加上某个质数价值等于2,其他价值等于3#include #include #define N 50003bool prime[N];int va原创 2013-02-07 00:13:40 · 1153 阅读 · 0 评论 -
深度解密之HDU3826(Square free number)
题目:Square free number 首先,这道题我们一看数据10^18,很大,要1000ms出结果简直是天方夜谭,当然我们有神器。在数论中,我们都知道任何一个数都可以表示为若干个素数的乘积,当然素数可以相同,这就是唯一分解定理。然后知道这个之后就必然有:然后本题我们可以这样考虑:如果n的最小的素因子都超过10^6,那么我们说n最多只能分解成两个原创 2013-03-15 16:38:11 · 3359 阅读 · 0 评论 -
BZOJ2956 (模积和)
题目:2956: 模积和 题意:求∑∑((n mod i)*(m mod j))其中1本题坑我太久啊,思路:∑∑((n mod i) * (m mod j)) 1#include #include using namespace std;typedef long long LL;const LL MOD = 19940417;LL sum原创 2013-04-16 16:06:48 · 3319 阅读 · 0 评论 -
HDU4475(找规律+预处理加速)
题目:Downward paths 设size=i,答案是ai; a1=2=1+1; a2=8=2+2*2+2; a3=48=8+8*2+8*2+8; a4=384 =48+48*2+48*2+48*2+48; ......很明显规律:an=an-1+2*(n-1)an-1+an-1=2*n*an-1;原创 2013-05-05 21:29:28 · 1313 阅读 · 0 评论 -
FZU1969(最大公约数之和)
题目:GCD Extreme 题意:Given the value of N, you will have to find the value of G. The meaning of G is given in the following codeG=0; for(i=1;i for(j=i+1;j G+=gcd(i,j); sqrt(n)的算原创 2013-06-01 11:52:08 · 1752 阅读 · 0 评论 -
pollard_rho大数分解Java版
代码:import java.math.BigInteger;import java.security.SecureRandom; class PollardRho{ private final static BigInteger ZERO = new BigInteger("0"); private final static BigInteger ONE原创 2013-07-31 19:05:12 · 2062 阅读 · 0 评论 -
高次同余方程式的解数及解法
定理一:若是k个两两互质的正整数,,则同余式 (1)与同余式组 (i=1,2,3,...,k) (2)等价,并且若用表示对模的解数,T表示(1)式对模m的解数,则:所以求多项式的解可以用上述方法,先分解分别求出各个解再合并。定理二:p是原创 2013-07-26 18:41:15 · 13952 阅读 · 0 评论 -
POJ2154(Pólya定理与欧拉函数优化)
题目:Color 题意:将正n边形的n个顶点用n种颜色染色,问有多少种方案(答案mod p,且可由旋转互相得到的算一种) 先说说Pólya定理设Q是n个对象的一个置换群,用m种颜色涂染这n个对象,一个对象涂任意一种颜色,则在Q作用下不等价的方案数为: |Q|为置换群中置换的个数,为将置换q表示成不相杂的轮换的个数,其中包括单轮换,m为颜色数。 分析可以知原创 2013-03-10 16:08:26 · 4577 阅读 · 3 评论 -
HDU4279(2012年天津网络赛---数论分析题)
题目:Number题意: 给出一个f(x),表示不大于x的正整数里,不整除x且跟x有大于1的公约数的数的个数。定义F(x),为不大于x的正整数里,满足f(x)的值为奇数的数的个数。题目就是求这个F(x)。网上很多方法就是打表找规律,已经谈不上是算法了。这里我们可以来分析:不整除x且跟x有大于1的公约数的数的个数 f(x)=x-约数个数-互质数个数原创 2013-08-03 10:58:03 · 3345 阅读 · 0 评论 -
SPOJ Finding Fractions
题目地址:http://www.spoj.com/problems/FINFRAC/题目大意:给4个整数a,b,c,d,寻找两个整数p,q,使得a/b 连分数解法:设[a/b]表示a/b向下取整如果a/b >= 1,设k = [a/b],可以知道 ( a/b ) - k 如果a/b如果c/d>1,那么p = q = 1如果c/d 欲知详解请猛戳这里原创 2013-05-30 21:37:18 · 1461 阅读 · 0 评论 -
HDU4392(反素数强大的模版)
题目:Maximum Number Of Divisorsimport java.io.BufferedInputStream; import java.math.BigInteger; import java.util.ArrayList; import java.util.HashMap; import java.util.LinkedList; import java.原创 2013-08-03 19:05:22 · 1854 阅读 · 0 评论 -
连分数
对于连分数,我们可以表示为:对于无理数,ai一定是无穷数列,反之,对于有理数,ai一定是有穷数列。对于上式中的p与q,有递推式:而对于sqrt(n)来说,ai中的首项为一个单独的整数,除了它后面的都会循环。下面我们来分析一个关于连分数的题目。题目:连分数题意:给两个整数n和k,n分子分母对1000000007取原创 2013-07-27 19:11:50 · 4683 阅读 · 0 评论 -
HDU4394(数论中的广搜)
题目:Digital Square 题意:Given an integer N,you should come up with the minimumnonnegative integer M.M meets the follow condition: M2%10x=N (x=0,1,2,3....) 从低位向高位广搜,如果当前情况满足M^2 % 10^y = N %原创 2013-05-31 14:33:36 · 2022 阅读 · 0 评论 -
关于丢番图方程x^2-dy^2=-1
我们知道丢番图方程,其中d是非完全平方正整数,那么此方程就是Pell方程,到目前为止对于它的最优求解方法就是经典的连分数问题。可以看这里:http://blog.csdn.net/acdreamers/article/details/8529686 那么对于上述的Pell方程来说,它一定是有解的,而现在我们研究另一个丢番图方程:,其中同样要求d是非完全平方正整数,对于这个方程,它就原创 2013-08-18 12:02:50 · 5523 阅读 · 5 评论 -
Farey级数
Farey级数,中文名是:法雷级数。 百度上是这样定义的:每一行从0/1开始,以1/1结尾,其它数自左至右将所有的真分数按增加顺序排列;第n行是由所有分母小于或等于n的真分数组成,我们称为n阶法雷级数。 那么我们可以从定义中知道,n阶法雷级数的个数为: 法雷级数有两个重要的性质: (1)如果与是相邻的两项,那么 (2)如果,,是相邻的三项,那么有:原创 2013-08-13 17:49:14 · 1914 阅读 · 0 评论 -
马尔可夫方程的解
首先马尔可夫方程是这样一个方程:,其中x,y,z为正整数。 那么关于它有几个结论:(1)它有无穷多组解。(2)如果x=a,y=b,z=c是它的一组解,那么x=a,y=b,z=3ab-c是它的另一组解。(3)它的每一组解都能从x=1,y=1,z=1这组解开始通过(2)中的结论迭代产生。 在此方程解中出现的数称为马尔可夫数,分别是:1, 2, 5, 13, 29, 34原创 2013-08-16 14:57:05 · 4092 阅读 · 0 评论 -
构造类斐波那契数列矩阵
题目链接题目:给定正整数a,b,n,m,求的值。其中0 以前做过的矩阵连乘啊,就是构造矩阵就可以轻松解决。我们知道0,可以知道后面的那一坨一定是整数,这个公式明显成立。然后像斐波那契数列那样构造矩阵。注意n是从1开始的。#include #include #include #include using namespace std;typedef lo原创 2013-05-30 13:29:05 · 4434 阅读 · 0 评论 -
HDU3939(毕达哥拉斯三元组的解)
应用于求圆上整点个数或者解方程 题目1:Fermat vs. Pythagoras#include #include #include #define N 1000001using namespace std;bool flag[N];int gcd(int a,int b){ return b!=0? gcd(b,a%b):a;}vo原创 2012-08-29 21:00:36 · 3094 阅读 · 0 评论 -
关于方程a^x=1(mod m)的最小x解
题目:Description has only two Sentences 题意:输入X,Y,a,其中Y%(X-1)=0,求最小的正整数k,满足Y/(X-1)*(X^k-1)%a=0分析:令m=Y/(X-1),即m(X^k-1)%a=0,对于m,a先求出g=gcd(m,a)然后约去g,即约分后只需(X^k-1)%(a/g)=0即可。设c=a/g 则(X^k-1)原创 2013-05-29 19:12:58 · 4736 阅读 · 0 评论 -
连分数求解Pell方程
学习连分数请猛戳这里。 任何一个有理数一定可以唯一地写成有限连分数;可以证明:任何一个无理数一定可以唯一地写成无限连分数; 上次求Pell方程的特解时,采用的暴力求解,其实还有一种更有效的求解方法,那就是今天我要说的连分数。连分数的求解方法:欧几里德算法 利用连分数求解Pell方程的特解: 题目:Smith's Problem 题意:原创 2013-01-22 14:11:06 · 4689 阅读 · 0 评论 -
关于landau函数
兰道函数是这样定义的: 对于所有非负整数,兰道函数定义为对称群的所有元素的秩之中,最大的一个。或者说,是的所有整数分拆之中的最小公倍数。 例如 ,,没有其他5的分割方式能得出一个更大的最小公倍数,故此。 关于兰道函数有一个结论: 那么 的值可以用动态规划思想求出。 每步添加一个新数,必然有这两个数互素。 题目:有一个正整数n,原创 2013-10-03 19:32:21 · 3763 阅读 · 0 评论 -
哥德巴赫猜想的拓展
哥德巴赫猜想:任何一个大于2的偶数,都可以表示为两个素数之和。 另外还有,任何一个大于5的奇数都可以表示为三个素数之和。 题目:http://acm.timus.ru/problem.aspx?space=1&num=1356 题意:给定一个正整数n,范围是[2,10^9],把n表示为若干个素数的和,输出一种方案,使得素数的个数最少。 分析:如果n是素数,那么原创 2013-10-04 18:53:59 · 3395 阅读 · 0 评论 -
2013年长沙网络赛G题
题目:http://acm.zju.edu.cn/changsha/showProblem.do?problemId=28 题意:给一个数n,范围是[2,80000],使用加,乘运算和最多3个素数,有多少种方法使得结果恰好等于n。 分析:先素数筛选,然后我们可以看出,设有3个素数a,b,c,那么有如下几种情况。a + b + c = n;a + b = n;a + b*原创 2013-10-05 19:35:59 · 2276 阅读 · 0 评论 -
Timus1286(欧几里德算法的应用)
题目:http://acm.timus.ru/problem.aspx?space=1&num=1286 题意:一个任意大的棋盘,一个Knight每次的移动可以从(i,j)到(i+q, j+p), (i−q, j+p),(i+q, j−p), (i−q, j−p),(i+p, j+q), (i−p, j+q),(i+p, j−q), (i−p, j−q) 中的任意一个。给定初始坐原创 2013-10-06 15:26:43 · 1923 阅读 · 0 评论 -
Timus1430(裴蜀定理应用)
题目:http://acm.timus.ru/problem.aspx?space=1&num=1430 题意:给出a,b,N,找出自然数x,y满足:N-(a*x+b*y)的值最小,如果有多组解是,输出任意一组。 #include #include #include using namespace std;void Work(int a,int b,int原创 2013-10-06 15:13:47 · 3161 阅读 · 0 评论 -
POJ3197(连分数表示)
题目:http://poj.org/problem?id=3197 分析:对于分数利用欧几里德算法可以写成连分数的形式,这样p和q很大,用Java大数写很方便。 import java.io.*;import java.util.*;import java.math.BigInteger;public class Main{ static final in原创 2013-10-16 15:31:35 · 1848 阅读 · 0 评论 -
hdu4746(莫比乌斯反演)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=4746 题意:给出n, m, p,求有多少对a, b满足gcd(a, b)的素因子个数分析:设A(d):gcd(a, b)=d的有多少种 设B(j): gcd(a, b)是j的倍数的有多少种,易知B(j) = (n/j)*(m/j) 则由容斥原理得:(注:不同行的μ是原创 2013-10-19 15:51:13 · 5641 阅读 · 1 评论 -
codeforces 数论分析题
题目:http://codeforces.com/contest/359/problem/C 题意:给一个素数x和一个长度为n的数列a[],求的分子和分母的最大公约数。 分析:对于分子来说,我们把分子中的每一相等的项合并起来,然后相同的项必然有系数,那么所有的系数有可能也是x的倍数。那么我们把它提出来即可。#include #include #include #原创 2013-11-08 20:14:50 · 2537 阅读 · 0 评论 -
HDU3113(工科数学分析之分解)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=3113题意:给出一个正整数n,范围是[1,1000000],求出满足方程的一组整数解,要求x最小。分析:这个方程与平方和不同的是,加号两边的任意一个可以为负数,所以直接枚举然后Hash就显得不好做了。那么我用一种比较有效的方式解决。我们知道,那么我们这样来做,首先把n原创 2013-12-03 15:31:22 · 1947 阅读 · 0 评论 -
HDU2879(积性函数)
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2879#include #include #include using namespace std;typedef long long LL;const int N = 10000005;const int M = 1000005;bool prime[N];int原创 2013-12-03 21:31:44 · 2270 阅读 · 0 评论 -
完数
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1114题意:给定一个数n,求满足条件大于等于n的最小的完数。分析:我们先把前13个完数存进数组,然后比较即可。因为第13个完数的位数已经大于100位了,所以再大的就用不着了。再利用Java的BigInteger进行比较很方便。i原创 2013-12-19 15:36:23 · 1646 阅读 · 0 评论 -
51nod---无法表示的数
题目:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1176题意:z = (x/2)取整后 + y + xy,x,y都是大于0的整数。即:x,y取不同的数,z可能有多种表示方式,也可能一种都没有,比如3,15就无法用任何x,y来表示。现在将所有无法表示的数排个序,组成一个序列S原创 2013-12-19 11:49:38 · 4572 阅读 · 0 评论 -
LCM from 1 to n
题目:http://acm.hust.edu.cn/vjudge/problem/viewProblem.action?id=26999题意:给定一个正整数n,求的值,输入数据有10000组,每组一个数n,1分析:定义为1,2,3,...,n的最小公倍数。则可以发现有如下结论:所以有:那么,我们先把所有素数的连乘预处理原创 2014-01-16 18:12:13 · 3874 阅读 · 0 评论 -
利用找因子来找方程解的个数
题目:Equation 不解释,赤裸裸的数论,开始本来方法很对,WA了很多次,原因就是没有用高精度,突然感觉自己好想撞墙。import java.io.*;import java.util.*;import java.math.BigInteger;public class Main { static int k=0,n; static final int原创 2013-03-27 15:28:45 · 2336 阅读 · 0 评论 -
离散对数(Baby Step Giant Step)
扩展Baby Step Giant Step深入学习请戳这里 题目:Clever Y 求解A^x = B (mod C) 中 0 本算法的安全性更高。#include#include#include#include#define CC(m ,what) memset(m , what , sizeof(m))typedef long long L原创 2013-02-12 20:04:27 · 4903 阅读 · 0 评论 -
原根
定理:如果p为素数,那么素数p一定存在原根,并且p的原根的个数为phi(p-1).设m是正整数,a是整数,若a模m的阶等于φ(m),则称a为模m的一个原根.假设一个数g对于P来说是原根,那么g^i mod P的结果两两不同,且有 1那么g可以称为是P的一个原根,归根到底就是g^(P-1) = 1 (mod P)当且仅当指数为P-1的时候成立.(这里P是素数).求原根目前的做法只原创 2013-05-04 12:14:39 · 11655 阅读 · 2 评论 -
x^A=B(mod C)的解 (离散对数与原根)
题目:Broot题意:给出k,m,newx的值,求方程x^k(mod m)=newx的解,其中m为素数。解法步骤:(1)先暴力求m的原根g(2)大步小步求g^t1(mod m)=newx(3)则g^(t1+n*t2)(mod m)=newx,t2=p-1(4)x=g^y(mod m),x^k=(g^y)^k=g^(yk)=g^(t1+n*t2)那么就是求原创 2013-07-26 20:49:17 · 7026 阅读 · 1 评论 -
离散对数(关于方程x^A=B(mod C)的解)
求方程:的解个数分析:设,那么上述方程解的个数就与同余方程组:的解等价。设同于方程的解分别是:,那么原方程的解的个数就是所以现在的关键问题是求方程:的解个数。这个方程我们需要分3类讨论:第一种情况:对于这种情况,如果方程的某个解设为,那么一定有,可以得到,即所以方程的解个数就是:,也就是第二种情原创 2013-08-05 16:11:07 · 6821 阅读 · 2 评论