数论
文章平均质量分 70
自爄創煇熿
这个作者很懒,什么都没留下…
展开
-
poj1845求n的因子和
此题求a^b的因子和,并且是大数。一个数n可以写成素数的乘积。 对A进行素因子分解得 A = p1^a1 * p2^a2 * p3^a3 *...* pn^an. 故 A^B = p1^(a1*B) * p2^(a2*B) *...* pn^(an*B);例如:(15)^3=(3*5)^3=(3^0+3^1+3^2+3^3)*(5^0+5^1+5^2+原创 2012-11-10 20:21:28 · 666 阅读 · 0 评论 -
hdu母函数
hdu1028#include #include using namespace std;const int maxexp=120;int main(){ int n, now, pre; int f[2][maxexp+1]; while (scanf("%d", &n)==1) { memset(f, 0, sizeof(f));原创 2013-04-05 08:43:23 · 879 阅读 · 0 评论 -
hdu 2065 可以用母函数
现在有一长度为N的字符串,满足一下条件:(1) 字符串仅由A,B,C,D四个字母组成;(2) A出现偶数次(也可以不出现);(3) C出现偶数次(也可以不出现);计算满足条件的字符串个数.当N=2时,所有满足条件的字符串有如下6个:BB,BD,DB,DD,AA,CC.由于这个数据肯能非常庞大,你只要给出最后两位数字即可. 直接用公式: 4^n-1+2^n-1;#原创 2013-05-01 10:45:41 · 618 阅读 · 0 评论 -
hdu3925 A至少加上多少包含B(java)
从a的最低位开始枚举和B比较。import java.math.BigInteger;import java.util.Scanner;public class Main{ public static void main(String[] args) { Scanner cin = new Scanner(System.in); BigI原创 2013-05-02 07:32:35 · 669 阅读 · 0 评论 -
求一个数的k次方的前三位。
#include#include#define esp 1e20int fun1(int n,int k){ double res=1.0; double base=n*1.0; while(k) { if(k&1) { res*=base; while(res>=esp) re原创 2013-05-07 14:12:58 · 677 阅读 · 0 评论 -
zoj 3647 组合数学
给个n*m的方格,问有多少三角形,共线的不算。共有 (n+1)*(m+1) 个点,设为 t 。 从这里面选出3 个点,共有C(t,3)种,在水平上共线: ( (m+1)*fun(n+1,3) ) 在竖直上共线的有 ( (n+1)*fun(m+1,3) ),对于倾斜的情况,先枚举两端的端点,如图,在一个6*6的方格中选4*4的两个端点,其中可构成三点花线的另一点的个数为最大公约数gcd(原创 2013-07-20 10:56:13 · 631 阅读 · 0 评论 -
zoj 3645 高斯消元
题意是:给12个方程,形如 (a0-x0)^2 +(a1-x1)^2+ ·········+ (a10-x10)^2=d^2;利用嘴一个方程和上面11个方程相减,编程一次方程组 yoga高斯消元法解方程;#include#include#include#include#includeusing namespace std;#define FF freopen("Inp原创 2013-07-22 08:38:41 · 612 阅读 · 0 评论 -
hdu 3501 欧拉函数求和
题意:求小于n 的与n不互质的数的和。 小于n与n互质的欧拉函数的和 sum = n*(phi(n))/ 2;所以结果就是 ans= (n-1)*n / 2 - sum;#include#include#include#define ll long longconst int mod=1000000007;ll phi(ll n){ ll m=(ll)sqrt(n原创 2013-07-30 19:13:42 · 754 阅读 · 0 评论 -
hdu 2588 欧拉函数 &&hdu 2504
题意:x在1到n之间,求满足条件的gcd(x,n)>=m的x个数题解:设n=p*d ; x= q *d ; d为gcd(x,n) 则p与q互质。所以我们只需求d>=m时的 p,与p互质的数就是q的取值,即为x的取值 ,所以(n/p)的和即为答案。#include#include#includeconst int N=1e6;int num[N];int phi(int原创 2013-07-30 17:26:52 · 737 阅读 · 0 评论 -
hdu 4602 找规律
题意是:给你两个数 n k,,问n的所有整数划分中,k出现的次数。题解: 1 2 3 4 5 6 7 当n=5时,28 12 5 2 1 n =6 64 28 12 5 2 1 ····························原创 2013-07-26 09:32:02 · 572 阅读 · 0 评论 -
hdu 1695 两个区间中互素的个数 (容斥)
题意是,【1,l】,【1,r】之间个数一个数两个数的最大公约数等于k 求有多少这样的数对。设x是在【1,l】中取的数,y是在【1,r】中取的数。x =a*k ,y=b*k ,k为最大公约数, 所以a与b互素,问题转换为区间(1,l/k)(1 , r/k)中有多少互素的数对。容斥原理在这里求的是 i 在(1,l/k)中与i不互素的个数。例如 1到10中能被2,3整除的个数为 1原创 2013-08-03 17:04:48 · 922 阅读 · 0 评论 -
hdu 1573 孙子定理
题意:在1 到n中求有多少个x满足 x%a【i】=b【i】。令任意固定整数为M,当M/A余a,M/B余b,M/C余c,M/D余d,…,M/Z余z时,这里的A,B,C,D,…,Z为除数,除数为任意自然数([span]如果为0,没有任何意义,如果为1,在孙子定理中没有计算和探讨的价值,所以,不包括0和1)时;余数a,b,c,d,z为自然整数时。1、当命题正确时,在这些除数的最小公倍数内原创 2013-07-30 10:41:39 · 720 阅读 · 0 评论 -
poj 2886 线段树 (用反素数)
题意:有n 个人,每个人有一个卡,上面有一个非零的数。第一次给一个数k,第k个人跳出,然后看第k的卡上数字是多少,如果大于0 则顺时针数那人人跳出。小于零,逆时针数到的那个人跳出,一次类推,第x次跳出的人会得到f(x),f(x)等于x的因子个数,求最大的f(x)f(x)满足反素数。 线段树的区间存的是有多少人。#include#include#includeusing namespa原创 2013-08-11 14:15:43 · 597 阅读 · 0 评论 -
hdu 4712 Hamming Distance
题意:给n个16进制数,求每对16进制数异或得到的数的二进制中1的个数最少的个数。#include#include#include#includeusing namespace std;#define mem(x,y) memset(x,y,sizeof(x))#define FF freopen("Input.txt","r",stdin)#define Debug puts(原创 2013-09-09 17:13:21 · 736 阅读 · 0 评论 -
poj 2773 Happy 2006
题意: 求与m互质的第k个数。我们可以找到规律,1 ,2 ,3 ,4, 5, 6 ,7,8,9, 11,12,13,14 与5互质的数 x*m + 小于5与互质的数。gcd(b×t+a,b)=gcd(a,b) (t为任意整数)则如果a与b互素,则b×t+a与b也一定互素,如果a与b不互素,则b×t+a与b也一定不互素故与m互素的数对m取模具有周期性原创 2013-09-10 15:22:35 · 551 阅读 · 0 评论 -
2013 ACM/ICPC Asia Regional Changsha Online
题意 描述不理解, 是让求(l+sqrt(l*(l-1)))^k%k ;向下取整。设b=sqrt(l*(l-2)) (l+b )^k是小数直接算会有错误。所以要凑成整数。Cn=(l+b)^k +(l - b)^k ; Cn的二项式展开可以知道 b 的奇数次方会相消掉。(l-b)是在0和1范围内的,(l-b)^k也是在0和1之间。所以结果是向上取整的。最后减1Cn*( (l原创 2013-09-25 09:41:30 · 714 阅读 · 0 评论 -
hdu4002
此题求1~n之间n/φ(n)最大的n,φ(n)=n/(1-i/p1)*(1-1/p2)······(1-1/pk); n/φ(n)=p1/(p1-1) * p1/(p1-1) * ·······*pk/(pk-1);所以得出n的素因子越多,n/φ(n)就越大。而且最后结果一定是连续素数的乘积; #include#include#include#incl原创 2013-03-22 07:39:54 · 560 阅读 · 0 评论 -
poj2409polya定理
#include#includeint gcd(int a,int b){ int r=1; while(r!=0) { r=a%b; a=b; b=r; } return a;}/*int POW(int a,int b){ int sum=1; for(int i=1;i<=b;原创 2013-04-05 08:17:05 · 479 阅读 · 0 评论 -
hdu A/B
http://acm.hdu.edu.cn/showproblem.php?pid=1576A能够被B整除,所以A=i*B. 所以最后结果就是i%9973.#include#includeint main(){ int ncase; __int64 b,n; scanf("%d",&ncase); while(ncase--) {原创 2012-10-20 18:56:10 · 749 阅读 · 0 评论 -
hdu3826
题意为:给你一个数n,问n是否能被他的一个因子的平方整除,能则输出no,否则yes。n可以写成质数乘积的形式,因为nn=n/p;p为质数。假如余数n=p1^2*p2,若p1^2大于10的6次方p2小于10的6次方,所以只需看余数是否能被开方。#include#include#include#define maxn 1000020int prime[maxn],vis原创 2012-11-27 20:52:42 · 752 阅读 · 0 评论 -
K-based Numbers
题意:给你一个k,表示进制,n表示n位,问k进制表示成n位,有多少种。找规律。#include#include__int64 dp[11][19];int main(){ int n,k,i,j; for(i=2;i<=10;i++) dp[i][1]=i-1 , dp[i][2]=(i-1)*i; for(i=2;i<=10;i++) fo原创 2012-11-28 20:11:23 · 328 阅读 · 0 评论 -
hdu1316 a~b之间有多少fib数
How Many Fibs?http://acm.hdu.edu.cn/showproblem.php?pid=1316#include#include#includeusing namespace std;string operator +(string &a,string &b){ int i; int sum[2001]={0}; int l原创 2012-11-28 21:26:48 · 666 阅读 · 0 评论 -
zoj3176
给你两个数,k,m,使m^n次方的第k位是7,求最小的nzoj操作界面真无语。#include#includeint main(){ int k,m,i; int a[1005]; while(~scanf("%d%d",&k,&m)) { memset(a,0,sizeof(a)); a[0]=1; i原创 2012-11-29 20:37:15 · 441 阅读 · 0 评论 -
hdu4279
http://acm.hdu.edu.cn/showproblem.php?pid=4279找规律,无语,看了解题报告,还能这样找规律,本以为有什么神奇的解法。不敢做题。#include#include#includeusing namespace std;int f[20]={0,0,0,0,0,0,1,1,2,3,4,4,5};__int64 get(__int64 x){原创 2012-12-02 09:02:46 · 483 阅读 · 0 评论 -
poj 3318 (矩阵乘积)
转换成一维矩阵的形式 O(n^2)代码:#include#include#define maxn 505int n;int a[maxn][maxn],b[maxn][maxn],c[maxn][maxn];int abd[maxn],bd[maxn],cd[maxn],d[maxn];void init(int m[][maxn]){ for(int i=1;i原创 2012-12-25 10:52:34 · 450 阅读 · 0 评论 -
hdu1787
水题,直接欧拉数模板。#include#include__int64 ea(__int64 n){ __int64 sum=n,a; for(a=2;a<=sqrt(n+0.5);a++) { if(n%a==0) { sum=sum*(a-1)/a; while(n%a==0)原创 2013-01-21 15:13:48 · 622 阅读 · 0 评论 -
hdu2180
先计算出所有时针与分针重合的点,在比较时针与分针重合求法:60x=11y,x为时针,y为分针,枚举x即可#includedouble norm[]={0,65.45, 130.91, 196.36, 261.82, 327.27, 392.73, 458.18, 523.64, 589.09, 654.55, 720.00, 785.45, 850.91,原创 2013-03-07 13:34:12 · 852 阅读 · 0 评论 -
hdu1717
小数(纯循环小数、混循环小数、不循环小数)化成分数纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各位上的数都是9。9的个数与循环节的位数相同。一个混循环小数的小数部分可以化成分数,这个分数的分子是第二个循环节以前的小数部分组成的数与小数部分中不循环部分组成的数的差。分母的头几位数是9,末几位是0。9的个数与循环节中的位数相同,0的个数与不循环部分的位数相同原创 2013-03-07 20:10:48 · 1108 阅读 · 0 评论 -
hdu3006
题意:给你一些集合,求出可以组成的集合数;用二进制方法:3表示成 100;4表示成1000;则3,4组成的集合表示成1100;在求按位或即可代码:#include#includeint vis[(1<<14)+1];int main(){ int n,m,i,j; while(~scanf("%d%d",&n,&m)) {原创 2013-03-28 20:38:08 · 490 阅读 · 0 评论 -
hdu2049(排列)
组合公式+错排错排递推:第一步,“错排” 1 号元素(将 1 号元素排在第 2 至第 n 个位置之一),有 n - 1 种方法。第二步,“错排”其余 n - 1 个元素,按如下顺序进行。视第一步的结果,若 1 号元素落在第 k 个位置,第二步就先把 k 号元素“错排”好, k 号元素的不同排法将导致两类不同的情况发生:( 1 ) k 号元素排在第 1 个位置原创 2013-04-01 15:27:09 · 464 阅读 · 0 评论 -
poj1664 (递推)
m个苹果放n个盘子里。盘子可以空,5,1,1和1,5,1是相同的方法。1:先把n个盘子都放一个,剩下m-n个苹果在放这n个盘子。2:有一个盘子空着,m个苹果放在n-1个盘子里。#includeint fun(int m,int n){ if(m<0) return 0; if(m==0||n==1) return 1; return fun(m-n,n)+f原创 2013-04-02 14:35:34 · 431 阅读 · 0 评论 -
zoj3690(递推)
题意:有n个人,1到m个数,这n个人,每人选一个数字,要求相邻的两个人选择的数不能相等,相等时不能小于ka[i] 表示第i位置的>k的种数 。b[i]表示第i位置a[1]=m-k; b[1]=k;用矩阵求解;#includeconst long long mod=1000000007;long long a[4],b[4];long long m,k;void fun(原创 2013-04-02 09:51:45 · 820 阅读 · 0 评论 -
诡秘的余数 (zjutoj)
http://acm.zjut.edu.cn/ShowProblem.aspx?ShowID=1010模拟过程代码:#include#include#includevoid work(char *str,int len,int m){ int i,n; for(i=0,n=0;i<len;i++) { n=n*10+str[i原创 2013-03-20 19:07:17 · 1501 阅读 · 0 评论 -
常用函数
求最大公约数:int gcd(int a,int b){ int c=a%b; while(c) { a=b; b=c; c=a%b; } return b;}int gcd(int a,int b) { return b?gcd(b,a%b):a;} 求组合数公式:ll原创 2013-07-20 10:59:01 · 634 阅读 · 0 评论