摘要:
分析:这题很水,只是做的时候对边界没有分析正确,WA了很多次。发上来,警示自己要细心。方法1:设f(n)为第n为可以为0的排法:View Code #include <stdio.h> #include <stdlib.h> #include <string.h> int dp[100], k; int f(int n){ if(n == 1) return k; if(n == 2) return (k-1)*(k+1); else if(dp[n]) return dp[n]; else return (dp[n] = (k-1)*(... 阅读全文
posted @ 2013-04-02 21:53
Still_Raining
阅读(279)
评论(0)
推荐(0)
摘要:
看了几天挑战编程的数论,颇有感触,尤其是欧几里得算法,特此记下笔记(毕竟书是借的)。 整除:对于整数a和b, 若存在整数k使得a = bk, 则称b整除(divides)a(用b|a来表示)。b|a也可以说成b是a的约数,或者a是b的倍数(multiple)。唯一分解定理:x能唯一的表示成它的素因数的乘积。如果两个整数的最大公约数(greatest common divisor)(也称gcd)是1,称二者是互素(relatively prime)的。Euclid算法:gcd(a,b)=gcd(b,a%b)Euclid算法的证明:1.如果b|a,则gcd(a,b)= b。因为如果b整除a,则存在 阅读全文
posted @ 2013-04-02 20:17
Still_Raining
阅读(979)
评论(0)
推荐(0)
摘要:
题目链接。分析:一开始竟然天真的按着题意来。果断TLE。然后就改了下。#include <stdio.h>int a[32800];int main(){ int T, n, i, j, cnt; scanf("%d", &T); while(T--){ scanf("%d", &n); for(i=1; i<n; i++) a[i] = 1; for(i=2; i<n; i++){ if(n % i == 0){ for(j=2; j<n; j++){ ... 阅读全文
posted @ 2013-04-02 18:49
Still_Raining
阅读(141)
评论(0)
推荐(0)
摘要:
链接地址。分析:如果n能被a整除,那么一定存在一个b使得a*b = n。开关经两次变化相当于没有变化。那么只要看a = b的那种特殊情况就OK了。#include <stdio.h>#include <math.h>#include <stdlib.h>int main(){ unsigned n, k; while(scanf("%d", &n) == 1 && n){ k = (int)sqrt(n*1.0); if(k*k == n){ printf("yes\n"); } else pr 阅读全文
posted @ 2013-04-02 13:38
Still_Raining
阅读(142)
评论(0)
推荐(0)
浙公网安备 33010602011771号