摘要:
题意:一条整数链,要求相邻两数前一个整除后一个。给出链尾的数,求链的最大长度以及满足最大长度的不同链的数量。 类型:因式分解+排列组合 算法:因式分解的素因子个数即为链长,链中后一个数等于前一个数乘以某素因子,所以链的数量即为这些因子不全相异的全排列数:A!/(a1!a2!a3!..) #inclu 阅读全文
摘要:
题意:给两个四位素数a和b,求从a变换到b的最少次数,每次变换只能变换一个数字并且变换的过程必须也是素数。 思路:先打表求出四位长度的所有素数,然后利用BFS求解。从a状态入队,然后从个位往千位的顺序枚举下一个素数,入队,直到状态为b为止。 #include <cstdio> #include <q 阅读全文
摘要:
题意:给出n,求不大于n的素数有多少个。 算法:先用线性时间复杂度的筛法打素数表,对于每个输入统计不超过的素数个数。 #include <cstdio> int p[100010]; bool np[1000010]; int cntp; void SievePrime(int n) { for ( 阅读全文
摘要:
题意:给你一个循环小数,化成分数,要求分数的分母最小。 思路:暴力搜一遍循环节 把循环小数化分数步骤: 纯循环小数的小数部分可以化成分数,这个分数的分子是一个循环节表示的数,分母各位上的数都是9,9的个数与循环节的位数相同。能约分的要约分。 例: 这个分数的分子是第二个循环节以前的小数部分组成的数与 阅读全文
摘要:
题意:求两数最大公约数和最小公倍数。 类型:辗转相除法 算法:gcd(a,b)=gcd(b,a%b),lcm(a,b)=a*b/gcd(a,b)。 #include <cstdio> #include <iostream> using namespace std; int gcd(int a, in 阅读全文
摘要:
题意:从待选的路里面选出若干将所有点连通,求选出的边里最长边的最小值。 算法:要使得树的最长边最小,那么每次确定的边都应是待选边里最小的,即最小生成树。对应Kruskal算法。 #include <cstdio> #include <iostream> #include <algorithm> #i 阅读全文