ACM_数论
文章平均质量分 70
_天道酬勤_不忘初心
这个作者很懒,什么都没留下…
展开
-
HDU 1164 Eddy's research I(素因子拆分)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1164思路:每次除小于它的数就行,不用先筛一遍素数,刚开始筛素数的时候下标超int了,头一次遇到,因为任何一个数都能分解成素数之积,举个例子啊,如果能被4整除AC代码1:#include #include #include #include #include #include #原创 2016-05-19 15:48:09 · 295 阅读 · 0 评论 -
HDU 1027 Ignatius and the Princess II(求由1-n组成按字典序排序的第m个序列)
题目地址:点击打开链接思路:用STL里的函数即可,暴力换一下也可AC代码:#include#includeusing namespace std;int main(){ int m,n,a[1001],i,sum; while(cin>>m>>n) { sum=0; for(i=0;i<m;i++)原创 2015-11-08 22:28:23 · 473 阅读 · 0 评论 -
HDU 1465 不容易系列之一(错排公式)
题目地址:点击打开链接思路:错排公式的简单运用,刚开始写了个错误代码,wrong了无数发这个问题推广一下,就是错排问题,是组合数学中的问题之一。考虑一个有n个元素的排列,若一个排列中所有的元素都不在自己原来的位置上,那么这样的排列就称为原排列的一个错排。 n个元素的错排数记为D(n)。 研究一个排列错排个数的问题,叫做错排问题或称为更列问题。错排问题最早被尼古拉·伯努利和欧原创 2015-11-08 10:31:39 · 389 阅读 · 0 评论 -
HDU Largest prime factor(埃拉托色尼筛选法求素数模板法改动)
题目地址:点击打开链接题意:给你一个数,求它这个数的最大素因子在素数表的第几位思路:刚开始思路有一点错误,看错误代码错误代码:#include 0#include #include #include #include #include #include #include #include #include #include typedef long long原创 2015-11-08 10:08:16 · 443 阅读 · 0 评论 -
HDU 1576 A/B(扩展欧几里得算法)
题目地址:点击打开链接思路:1.(A/B)%9973=K2.A/B=K+9973X(X为任意数)3.A=KB+9973XB4.A%9973=(KB+9973XB)%99735.N=KB%99736.KB=9973Y+N(Y为任意数)7.K/N*B-9973/N*Y=GCD(B,9973)=1实际上就是用扩展欧几里得算法求X,具体求模的地方不太了解,参考大神A的,大神原创 2015-11-04 21:41:58 · 361 阅读 · 0 评论 -
HDU 5504 GT and sequence(给一堆数,求最大值,坑比较多)
题目地址:点击打开链接思路:看着是水题,坑还是比较多的,(1)如果有正数,那么正数的全乘起来,如果还有超过2个的负数再乘以偶数个最小的负数,直到不能乘为止(2)如果只有超过2个的负数,则乘以偶数个最小的负数,直到不能乘为止(2)如果只有一个负数或没有负数,如果有0,输出0,没零,那就输出负数AC代码:#include #include #include #include #in原创 2015-10-18 17:05:02 · 436 阅读 · 0 评论 -
HDU 5505 GT and numbers(求一个数乘以它的因子得到另一个数的最小步数)
题目地址:点击打开链接思路:参考大神A的,注意一下long long 能表示的最大数为2^63-1,而unsigned long long 能表示的最大数为2^63,自己比赛的时候没A出来理解不深AC代码:#include #include #include #include #include #include #include #include #include #原创 2015-10-18 18:07:10 · 410 阅读 · 0 评论 -
HDU 1013 Digital Roots(求数根,九余数定理)
题目地址:点击打开链接思路:第一个代码是模拟,第二个是运用了9余数定理AC代码:#include#includeusing namespace std;int main(){ int sum; char c; while(1) { sum = 0; //while(cin>>c && c != '\n')不能用cin输入输出原创 2015-08-08 09:59:27 · 822 阅读 · 0 评论 -
HDU 1405 The Last Practice(求质因子及其个数 )
题目地址:点击打开链接思路:水题AC代码:#include #include int a[65536];int main(){ int n,i,j,l = 1; while(scanf("%d",&n)) { if(n <0) break; memset(a,0,sizeof(a)); for(i=2; n!=1; i++) { while原创 2015-09-06 21:18:17 · 359 阅读 · 0 评论 -
HDU 2028 Lowest Common Multiple Plus(求n个数的最小公倍数)
题目地址:点击打开链接思路:原来不用判断大小也可以用辗转相除法,如果小数在前,大数在后,执行第一次gcd时,会把他们的顺序倒过来,还有就是用long longAC代码:#include using namespace std;long long gcd(long long a,long long b){ if(b == 0) return a;原创 2015-08-04 18:26:41 · 652 阅读 · 0 评论 -
HDU 1406 (完数)
题目地址:点击打开链接思路:提前预处理一下就行AC代码:#include#includeint x[10000];int main(){ memset(x,0,sizeof(x)); int i,j,a,b,sum = 1,t,temp; for(i=2; i<10000; i++) { sum = 1; for(原创 2015-11-08 22:43:43 · 336 阅读 · 0 评论 -
HDU 5461 Largest Point(求ax^2+by的最大值)
题目地址:点击打开链接题意:求ax^2+by的最大值,x和y在一个数组中思路:2层暴力超时,那就一层暴力ax^2的所有情况,参考学长A的,思路不是很清晰,等我问清楚了再写详细的AC代码:#include #include #include #include #include #include #include #include #include #include原创 2015-09-21 16:44:55 · 478 阅读 · 0 评论 -
HDU 1214 圆桌会议(好题)
题目地址:点击打开链接题意:n个人围成一个圈,现在每分钟交换一次相邻的位置,问最少需要多少分钟,n个人的顺序与原始顺序相反。例1234变成4321. 题解:一条线上的n个人,123..n变为n..321,需要1+2+...+(n-1)=n*(n-1)/2次,即1右移n-1步,2右移n-2步..。而该题是围成一圈,所以可以双向移动,因而将n分成两部分,n/2和n-n/2,两部分独自逆序。原创 2015-10-29 11:22:49 · 1270 阅读 · 0 评论 -
nyist 301 递推求值(矩阵快速幂)
题目地址:http://acm.nyist.net/JudgeOnline/problem.php?pid=301思路:AC代码:原创 2016-05-17 21:36:36 · 332 阅读 · 0 评论 -
HDU 1757 A Simple Math Problem(矩阵快速幂)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=1757思路:直接递推肯定超时,比赛的时候就想着找规律,如何把递推式转化为f1到f9的和规律,想炸了,没想到时矩阵快速幂,能把时间压为log(n),不会超时,代码也很好写AC代码:#include #include #include #include #include #includ原创 2016-05-18 10:57:40 · 262 阅读 · 0 评论 -
POJ 3070 Fibonacci(矩阵快速幂)
题目地址:http://poj.org/problem?id=3070思路:矩阵快速幂和快速幂的思想差不多,快速幂详解地址:http://blog.csdn.net/qq_25605637/article/details/47357119,按照下面2张图来就行AC代码:#include #include #include #include #include #incl原创 2016-05-17 16:47:22 · 384 阅读 · 0 评论 -
HDU 5015 233 Matrix(矩阵快速幂)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=5015思路:大神地址:http://blog.csdn.net/v5zsq/article/details/50775372,讲的很好,一列一列推AC代码:#include #include #include #include #include #include #include原创 2016-05-28 20:32:31 · 254 阅读 · 0 评论 -
HDU 3501 Calculation 2(欧拉函数)
题目地址:点击打开链接思路:需要用到这个公式如果gcd(n,i)=1,则gcd(n,n-i)=1,用欧拉函数求出和n互质的数的个数sum原创 2015-08-30 14:36:14 · 337 阅读 · 0 评论 -
HDU 2082 F(N)
题目地址:http://acm.hdu.edu.cn/showproblem.php?pid=2802思路:直接暴力模拟不行,打个表找找循环节找循环节程序#include #include #include #include #include #include #include #include #include #include #include const i原创 2016-03-27 18:21:45 · 272 阅读 · 0 评论 -
杭电校赛(逆袭指数)
逆袭指数Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 1854 Accepted Submission(s): 374Problem Description 这依然是关于高富帅小明曾经的故事——原创 2015-12-03 13:11:42 · 515 阅读 · 0 评论 -
HDU 1394 Minimum Inversion Number(循环数组求逆序数)(暴力,归并排序,线段树)
题目地址:点击打开链接思路:让一个数组不断把第一个数放到最后面,求最小的逆序数关于逆序数的概念举一个例子 3 2 5 1 43后面比3小的有2个2后面比2小的有1个5后面比5小的有2个1后面比1小的没有4后面比4小的没有至于如何求循环数组的最小逆序数,能根据第一个的逆序数算出来,假设数组原始的逆序数已经算出来为temp,则把第一个数放到最后面逆序数会少a[0]个(0原创 2016-01-03 21:11:08 · 385 阅读 · 0 评论 -
HDU 5317 RGCDQ(求一个区间素因子种类数的最大公约数)
题目地址:点击打开链接思路:2*3*5*7*9*11*13=270270AC代码:#include #include #include using namespace std;const int maxn = 1e6 + 10;bool isprime[maxn];int f[maxn],dp[maxn][8];void doprime(){ int i,原创 2015-09-05 23:11:45 · 429 阅读 · 0 评论 -
HDU 5344 MZL's xor(异或运算)
题目地址:点击打开链接思路:二进制数进行异或运算相同为0,不同为1,a[i]+a[j],和a[j]+a[i]异或值为0,不算,只算a[i]+a[i]AC代码:#include #include using namespace std;int main(){ int t,i; int n,m,z,l; scanf("%d",&t); while原创 2015-08-06 19:25:45 · 362 阅读 · 0 评论 -
HDU 1098 Ignatius's puzzle
题目地址:点击打开链接思路:参考别人的给定f(x)=5*x^13+13*x^5+k*a*x,现给出k值 ,求能使x取任意值都能使f(x)%65==0的最小a值。题解:数论,数学归纳法,使f(0)能整除65 然后 假设 f(x)能整除65 证明f(x+1)也能整除65,这样就能满足题意任意x的条件了。f(0)=0 能整除65, f(1)=18+ka 能整除65(假设的),假设f(原创 2015-08-12 18:39:19 · 347 阅读 · 0 评论 -
HDU 1205 吃糖果
题目地址:点击打开链接思路:参考别人的,仔细想想其实不那么难的把最多的那种 M(共计max个) 摆成一列,产生max-1个间隔,对于M来说,其他的糖果都是异类 (共计 sum-max个),可以用来填充间隔,但是如果sum-max能被填满,所以会有相邻的M,不符合要求 printf("No\n");当sum-max>=max-1时,M的间隔一定能被填满 printf("Yes\原创 2015-08-12 18:23:24 · 745 阅读 · 0 评论 -
HDU 5327 Olympiad
题目地址:点击打开链接思路:打表就行AC代码:#include #includeusing namespace std;int judge[100010];int main(){ int a[11]; int t,m,n,i,l,sum,k; memset(judge,0,sizeof(judge)); for(i=1; i<=100000原创 2015-07-30 17:14:51 · 363 阅读 · 0 评论 -
HDU 1128 Self Numbers
题目地址:点击打开链接思路:挺好的一题,刚开始以为很难,没写出来,没想到从1开始做个循环就可以了AC代码:#include#includebool a[1000005];int main(){ int i,k,sum; memset(a,true,sizeof(a)); for(i=1; i<1000000; i++) { sum = 0; k = i;//原创 2015-08-12 17:59:17 · 437 阅读 · 0 评论 -
HDU 1082 Matrix Chain Multiplication
题目地址:点击打开链接思路:用map和stack即可解决AC代码:#include#include#include#includeusing namespace std;struct node{int row,col;};int main(){ int n,i,count; char c; map mar; cin>>n; for(i=0; i<n; i+原创 2015-08-11 10:27:02 · 410 阅读 · 0 评论 -
HDU 2157 How many ways??
题目地址:点击打开链接思路:矩阵快速幂+有向可达图,有向可达图还不太明白,有时间看看AC代码:#include #include using namespace std;int per[21][21],s[21][21],middle[21][21],n;void matrix_mul(int a[21][21],int b[21][21])//数组就是在原地址上进行操作原创 2015-08-09 19:48:31 · 371 阅读 · 0 评论 -
HDU 1282 回文数猜想
题目地址:点击打开链接思路:水题AC代码:#includeint a[1000];bool is(int n){ int temp = 0,p; p = n; while(p) { temp = temp * 10 + p % 10; p /= 10; } if(temp == n) return false; else return true;原创 2015-08-09 09:51:56 · 317 阅读 · 0 评论 -
十个利用矩阵乘法解决的经典题目
原文地址:点击打开链接十个利用矩阵乘法解决的经典题目 好像目前还没有这方面题目的总结。这几天连续看到四个问这类题目的人,今天在这里简单写一下。这里我们不介绍其它有关矩阵的知识,只介绍矩阵乘法和相关性质。 不要以为数学中的矩阵也是黑色屏幕上不断变化的绿色字符。在数学中,一个矩阵说穿了就是一个二维数组。一个n行m列的矩阵可以乘以一个m行p列的矩阵,得到的结果是一个n行p转载 2015-08-09 18:38:18 · 316 阅读 · 0 评论 -
HDU 5363 Key Set
题目地址:点击打开链接思路:把奇数和偶数分开,递推也能做出来,公式求解AC了,懒得递推了,还有就是得用快速幂,不用会超时AC代码:#include #include using namespace std;long long quickmod(long long a,long long b,long long m){ long long ans = 1;原创 2015-08-08 12:34:51 · 361 阅读 · 0 评论 -
HDU 1286 找新朋友(欧拉函数)
题目地址:点击打开链接思路:欧拉函数的简单应用AC代码1:#include #include using namespace std;int main(){ int t,n,i,rea; scanf("%d",&t); while(t--) { scanf("%d",&n); rea = n;原创 2015-08-28 17:39:45 · 427 阅读 · 0 评论 -
HDU 2824 The Euler function
题目地址:点击打开链接思路:递推求欧拉函数AC代码:#include #include #define maxn 3000000//不能加分号long long x[3000000];int main(){ long long sum; int i,j,a,b; for(i=1; i<maxn; i++) x[i] = i;原创 2015-08-28 23:21:58 · 357 阅读 · 0 评论 -
HDU 1215 七夕节
题目地址:点击打开链接思路:基础题AC代码:#include#include#includeusing namespace std;int main(){ int t,n,i,sum; scanf("%d",&t); while(t--) { sum = 1; scanf("%d",&n); for(i=2; i*i <= n; i++) {原创 2015-08-14 12:59:57 · 346 阅读 · 0 评论 -
HDU 1395 2^x mod n = 1
题目地址:点击打开链接 思路:n为偶数肯定不行,因为2的n次方是偶数,偶数对偶数取模肯定是偶数,1也不行,剩余的奇数都行,因为每个除1的奇数都有一个比他们大1的偶数,对他们取余正好为1AC代码:#includeusing namespace std;int main(){ int n,x,sum; while(cin>>n) { if(n%2 == 0 || n =原创 2015-08-07 08:33:18 · 306 阅读 · 0 评论 -
HDU 5373 The shortest problem(判断一个数能否被11整除)
题目地址;点击打开链接思路:参考队友的代码写的,资料地址:点击打开链接 怎样判断一个数能不能被11整除? 判断一个数能不能被11整除与判断一个数能不能被7整除一样,都没有直接判断的方法,需要借助间接的方法,这种间接的方法有两种,其一是“割减法”,其二是奇偶位差法。 (1)割减法:判断被11整除的割减法与判断被7整除的割减法不同。即原创 2015-08-13 09:47:58 · 854 阅读 · 0 评论 -
HDU 1840 Equations
题目地址:点击打开链接思路:不能直接用二次函数根的判别公式,因为a,b,c的不同取值会导致函数变成常函数,一次函数等a=0b=0c=0INF对任何数都成立a=0b=0c!=00常函数a=0b!=0c=01一次函数a=0b!=0c!=01一次函数a!=0原创 2015-08-17 20:52:46 · 338 阅读 · 0 评论 -
HDU 2899 Strange fuction
题目地址:点击打开链接思路:先求导看单调性,不可能有单增的情况,因为y的取值大于0小于1e10,有单调递减的情况,100处为最小值,对函数二次求导大于0,原函数为凹函数,导函数为递增函数,导函数图像如下图,导函数y值为0时,值最小,所以左右值的差小于精度即可求出值AC代码:#include #include #include double y;double dao(原创 2015-08-05 14:48:58 · 361 阅读 · 0 评论 -
HDU 1597 find the nth digit
题目地址:点击打开链接思路:找规律AC代码:#include using namespace std;int main(){ int k,n,l; cin>>k; while(k--) { l = 1; cin>>n; while(l<n) { n -= l原创 2015-08-05 10:00:35 · 280 阅读 · 0 评论