
Volume 1.4 Maths-Number Theory
文章平均质量分 62
深蓝色的猫
一个努力成长为大牛的蒟蒻程序媛
展开
-
UVa OJ 10061
1、这题交了14次才过,刚开始是TLE,改成筛法求素数后还是TLE,取了n和bin的最小值还是TLE(这是个很重要的优化,如果n是1000000那时间将非常长,只要考虑bin的因子即可,当然,bin超过n时,只要考虑n即可)。仔细检查才发现原来是没考虑n==1的特殊情况导致死循环。(bin是binary的缩写,因为不知道进制的英文,就用二进制代替了。不要在意^_^) 2、后来一直WA,怀疑是lo原创 2013-03-05 22:58:26 · 668 阅读 · 0 评论 -
UVa OJ 10392
1、刚开始因为空格打错了所以PE一次——键盘不灵活的一定要仔细。 2、本题的关键是有且只有一个大于1000000的因子。也就是只要枚举2到1000000即可。剩下的除不尽的一定是因子,如果能除尽,早就在2到1000000时被分解掉了。 #include #include long long int n,j,count; int main(void) { while(sca原创 2013-03-06 00:25:17 · 366 阅读 · 0 评论 -
UVa OJ 575
1、没什么好说的,就是进制转换。 #include #include int func(int k) { if(k==1) return 2; return 2*func(k-1); } int main(void) { char s[50]=""; int i,a[50]={0}; while(fgets(s,50,stdin)原创 2013-02-08 23:02:32 · 257 阅读 · 0 评论 -
UVa OJ 408
1、本题刚开始是用暴力法,虽然每组数字最多才零点几秒,但是测试数据组数要是很多,那就会TLE。 2、到网上搜索,看到大家都是用求最小公倍数的方法。数论没怎么学,想不通为什么,但我知道两个数有大于1的公倍数是一定不行的。(两数最小间距是2) 3、因此,不完全归纳得只要gcd是1即可。这次AC。 #include int gcd(int x,int y) { if(y==0) r原创 2013-03-02 17:11:09 · 285 阅读 · 0 评论 -
UVa OJ 550
1、本题交了7次才过,除去题目本身比较陌生以外,自己心态浮躁也是一个原因。最后一次WA竟然是因为i没有初始化。只要把样例全测一遍就能找出错误的,但是因为我心情浮躁,所以只测试了第一个样例,这样是不对的。 2、前几次用了数组,不知为何总是RE,可能本题数据量太过庞大,数组开到100000还是不能通过。最后发现不用数组也可以,完全没有必要把以前处理过的值保存起来。 3、本题就是模拟,从第一个数的最原创 2013-02-27 23:21:55 · 391 阅读 · 0 评论 -
UVa OJ 568
1、刚开始以为和普通的取余一样,每次乘了n后再去掉后面的零,结果不对。举出反例:25*6,若先取5*6,结果是3,但实际上,最后一位应该是5。 2、产生这种情况的原因是题目要求去掉末尾的一串零。实际上,中间过程去掉0的时候,产生的“末位”3并不是真正的非零末位,而是要加到倒数第二位(与2*6=12的2相加)后才是非零末位——想象一下,如果不去掉0的话,那么实际上3还要进到前一位,因为它不是末位数原创 2013-02-28 23:27:18 · 405 阅读 · 0 评论 -
UVa OJ 350
1、简单的模拟,注意本题中给出的第一个数不一定是循环的开始,比如1234567567567567567567……如果只是判断与第一个是否相等的话,就会进入死循环。 2、注意for循环是在while内的,所以一次break不够,需要两次break才能跳出循环。 #include int z,i,m,l,j,num,count=0,a[10010]={0}; int main(void)原创 2013-03-02 21:23:10 · 350 阅读 · 0 评论 -
UVa OJ 10879
1、这个题有多种解,选其中一种即可。 #include int main(void) { int n,p,i,count=0; scanf("%d",&n); while(n--) { scanf("%d",&p); count++; for(i=2;i*i if(p%原创 2013-03-13 19:27:20 · 482 阅读 · 0 评论 -
UVa OJ 10110
1、不要从1开始枚举,因为只要判断n的平方根是否为整数即可。 2、用int是WA,改为unsigned int就AC了,不知道为什么。 #include #include int main(void) { unsigned int i,n; while(scanf("%u",&n)==1) { if(!n) break;原创 2013-02-23 00:36:12 · 303 阅读 · 0 评论