
数论
文章平均质量分 56
徐州牧
这个作者很懒,什么都没留下…
展开
-
poj解题报告——3292
#include#include#define size 1000001int H_Number[size+1]; void init(){ int i,j,k,m,p; memset(H_Number,0,sizeof(H_Number)); for(i=5;i { for(j=5;j {原创 2014-11-25 15:06:44 · 409 阅读 · 0 评论 -
poj解题报告——1183
1/a = (1/b + 1/c)/(1 - 1/(b*c)) 1/a = (b+c) / (b*c-1) b*c-1 = a*b + a*c c = (a*b+1) / (b-a);(可知:b>原创 2015-08-01 13:15:59 · 444 阅读 · 0 评论 -
poj解题报告——1730
题意:要求出一个完美的平方数,n=b^p,p最大就是完美平方数。 题解:将P从31到1遍历枚举,使用POW函数将他求出来,不过有一点问题就是精度问题,当用POW(125,1/3),直接取整的时候是4,所以需要在后面加一个0.1,也就是(int)(POW(125,1/3)+0.1).这样就可以求出结果了,还有要注意的是,他给出的N可能是负数,所以要对负数特殊处理,也就是说当N是负数原创 2015-07-31 11:49:28 · 433 阅读 · 0 评论 -
poj解题报告——2262
题解:写个素数筛法,然后暴力枚举判断#include#include#include#define N 1000001using namespace std;bool a[N];void primelist(){ a[0]=a[1]=1; for(int i=2;i<N;i++) if(!a[i]) for(int j=i*2;j<N;j+=i) a[j原创 2015-07-30 12:32:59 · 417 阅读 · 0 评论 -
poj解题报告——2356
题意:给定n个正数,请你从中找出若干个数,其和刚好是n的倍数。 题解:抽屉原理;如果将大于n个数量的物品放入n个抽屉,则必然存在某个抽屉放了大于1个物品。#include#include#includeint main(){ int sum[10010],flag[10010]; int a[10010],from[10010];原创 2015-07-29 11:55:50 · 397 阅读 · 0 评论 -
poj解题报告——1014
题意: 有分别价值为1,2,3,4,5,6的6种物品,输入6个数字,表示相应价值的物品的数量,问一下能不能将物品分成两份,是两份的总价值相等,其中一个物品不能切开,只能分给其中的某一方,当输入六个0是(即没有物品),这程序结束,总物品的总个数不超过20000代码如下#include#includeint a[7],sum,b[100],n;int dp[60001];void原创 2015-02-26 12:42:33 · 542 阅读 · 0 评论 -
poj解题报告——3122
题意是要公平地把pie分给每一个人(就是所有人得到的pie尺寸一致,但是形状可以不同),而且每个人得到的那份pie必须是从同一个pie上得到的。 值得注意的是自己要算进去,也就是f+1,我WA了两次的原因是exp选太小了1e-12,其实1e-7就够了。代码如下#include#include#define Pi asin(1.0)*2#define exp 1e原创 2015-02-09 12:30:20 · 492 阅读 · 0 评论 -
poj解题报告——1905
这就是应该算是数学题,光是公式代换就用了好久,二分只是为了凑值用的。代码如下#include#include#includevoid main(){ double l,ll,right,left,mid,n,c; while(scanf("%lf%lf%lf",&l,&n,&c)!=EOF) { if(l<0&&n<0&&c<0)原创 2015-02-08 15:08:54 · 493 阅读 · 0 评论 -
poj解题报告——3258
题意:一些石头排成一条线,第一个和最后一个不能去掉,其余的共可以去掉m块,要使去掉后石头间距的最小值最大。 这种数学题理解起来真不容易,不过想好了算法就好做了。代码如下#include#includeint a[50005];int b[50005];int cmp(const void *a,const void *b){ return *(int *)原创 2015-02-07 12:21:49 · 458 阅读 · 0 评论 -
poj解题报告——3273
给出一个大小为N的数组,将其分为M块,让每块数字之和的最大值尽量小。右边界是将整个数组当做一块,那么最大值就是所有数字之和;左边界是将整个数组分成N块,那么和的最大值就是数组元素中的最大值。其实,当给出一个答案后,从数组首元素开始叠加,超出答案那么分块数加1,这么遍历一遍后,要是分块数小于M,说明答案给的大了,反之答案给小了。代码如下#include#include#defin原创 2015-02-06 11:11:36 · 494 阅读 · 0 评论 -
poj解题报告——2191
梅森素数啊,啊哈哈,其实这题最快的做法是打表,但是打表有点太无语了,不过我还是贴了代码。 题意:判断所有质数i代码如下#include #include #include #include __int64 num[70]={1},queue[10];int Prime(int x){ int i; for(i=2;i*i原创 2014-11-29 23:19:38 · 621 阅读 · 0 评论 -
poj解题报告——2115
这题的题意不难理解,对C的for(i=A ; i!=B ;i +=C)循环语句,问在k位存储系统中循环几次才会结束。若在有限次内结束,则输出循环次数。否则输出死循环。但是问题来了,这里涉及到了同余方程的求解问题,这就要用扩展欧几里得算法,然后就要各种用公式,之前有一道青蛙约会的那题poj1061,用的做法也差不多。本题是要求解(a+c*x)mod2^k=b,求x的最小解,变式得 c*x=(b-a)原创 2014-11-25 20:16:18 · 623 阅读 · 0 评论 -
poj解题报告——1152
题意还是很明确的,给你一个N进制的整数R,题目保证R能被N-1整除,让你求符合条件的最小的N。 但是这题的数论证明有点困难了,我在此引用一下别人的证明,没有证明真的不好做啊。 设输入的是abcd,假设其解是n进制,(a*n*n*n + b*n*n + c*n + d)%(n-1)=0=>( (a*n*n*n)%(n-1)+ (b*n*n)%(n-1)+原创 2014-11-30 15:35:03 · 480 阅读 · 0 评论 -
poj解题报告——1845
代码如下#include#include#define size 10000#define mod 9901__int64 sum(__int64 p,__int64 n); __int64 power(__int64 p,__int64 n); __int64 sum(__int64 p,__int64 n){ if(n==0) r原创 2014-11-23 00:09:35 · 375 阅读 · 0 评论 -
poj解题报告——2635
这题特别好理解,就是代码坑啊。题意就是给一个数,这个数是两个大素数的积,再给出一个数,如果最小的素数比给的数大,打印GOOD,否则打印BAD和最小的素数。 这题用的方法是高精度求模+同余模定理。还有素数打表,把10^6内的素数全部预打表,在求模时则枚举到小于L为止。注意打表不能只打到100W,要保证素数表中最大的素数必须大于10^6。千进制的性质与十进制相似。例如,把K=1234原创 2014-11-22 23:24:15 · 498 阅读 · 0 评论 -
poj解题报告——1023
十进制转化为二进制变形。已知十进制非负整数n,假设二进制数字k位,转化为二进制为如下规则:1)若n为奇数,则最低位为必为1,(n-1)/2得到前k-1位十进制数字2)若n为偶数,则最低为必定为0,n/2得到前k-1位十进制数字重复循环,直至n为0为止,即可得到二进制表达式。现在规定二进制的权值发生了改变,改变规则为限定k位二进制数字,用字符‘p’表示该位与原二进制权值相同,即为原创 2015-08-01 13:55:50 · 499 阅读 · 0 评论