TYVJ 1107 Hankson的趣味题 解题报告
2011-08-05 19:44
393 查看
因式分解神马的,具体上代码:
#include <math.h> #include <stdio.h> #include <stdlib.h> int a0, a1, b0, b1; int prim[20000], num[20000], end; int ans[200000], len; int gcd(int a, int b) { int t; while(b != 0){ t = a % b; a = b; b = t; } return a; } void dfs(int now, int pro) { int i; if(now == end){ ans[len++] = pro; return; } dfs(now + 1, pro); for(i = 1; i <= num[now]; i++){ pro *= prim[now]; dfs(now + 1, pro); } } void work(int n) { int i = 2; int lim = sqrt(n); while(n != 1 && i <= lim){ if(n % i == 0){ if(a0 % i == 0 && a1 % i != 0){ while(n % i == 0){ n /= i; } i++; continue; } prim[end] = i; num[end] = 0; while(n % i == 0){ num[end]++; n /= i; } end++; } i++; } if(n != 1){ prim[end] = n; num[end++] = 1; } dfs(0, 1); } int main(int argc, char **argv) { int i; int n, t; scanf("%d", &n); while(n--){ scanf("%d%d%d%d", &a0, &a1, &b0, &b1); t = len = end = 0; work(b1); for(i = 0; i < len; i++){ if(gcd(ans[i], a0) == a1 && b0 / gcd(b0, ans[i]) * ans[i] == b1){ t++; } } printf("%d\n", t); } return 0; }
相关文章推荐
- NOIP 2009 解题报告(潜伏者,hankson的趣味题,最有贸易,靶形数独)
- NOIP2009解题报告(C/C++)(潜伏者)(Hankson的趣味题)(最优贸易)(靶形数独)
- NOIp2009TG T2/Luogu P1072 Hankson的趣味题 解题报告
- Hankson的趣味题[NOIP2009]解题报告
- Noip 2009 解题报告(潜伏着,Hankson的趣味题,最优贸易,靶形数独)
- Hankson的趣味题 解题报告
- TYVJ上一些DP的解题报告
- UESTC 第五届ACM趣味程序设计竞赛第一场(热身赛,非原创题) 解题报告
- TYVJ 1059 过河 解题报告
- TYVJ 1093 验证数独 解题报告
- TYVJ 1068 STR 解题报告
- TYVJ 1099 超级书架 解题报告
- TYVJ 1125 JR's chop 解题报告
- TYVJ1993 ACM/ICPC 2001 括号序列 解题报告
- TYVJ 1071 LCIS 解题报告
- TYVJ 1154 买饭队列 解题报告
- TYVJ 1103 多项式输出 解题报告
- TYVJ 1115 同余 解题报告
- [Tyvj1728]普通平衡树 解题报告
- TYVJ 1083 分糖果 解题报告