1.数字游戏
- 数字游戏
- 从小到大,根据已知算法,可以得到比最小问题大一级的答案,依次类推,与递归恰恰想法,该题就是一步步迭代得到答案。当然,如果想不到迭代的话,那只能枚举出来,用set容器来存储。
2.求阶层末尾0的个数
- 求阶层末尾0的个数
- 这道题是数学问题,实际上可以说是求该阶层中因子为5的个数。有时为了加快速度,可以用以下模板:
while(n){
ans=ans+n/5;
n=n/5;
}
3.数列计算
- 数列计算
- 这道题也是典型的数学运算和位运算的结合的问题。
4.质数因子
- 质数因子
- 这种题数据往往比较大,直接暴力不太友好,这道题巧妙之处不用重新判断的备选质数因子是否是质数因子。
5.素数
- 求素数
- 这里考察的是素数筛选法,埃拉托斯特尼。
- 核心代码:
for(i=2;i*i<=m;i++){
int k=i;
for(j=k*i;j<=m;j=k*i){
arr[j]=1;
k++;
}
}
- 不管i是不是素数,
k*i
(k>=2)肯定是素数,因此可以一步步求出素数。这里为什么是从k*i开始,这是因为k*i
(k>=2&&k<=i-1)已经在前面重复过来,这里可以优化编程。
6.其它数学问题
6.1饥饿的小易