专注 效率 记忆
预习 笔记 复习 做题
欢迎观看我的博客,如有问题交流,欢迎评论区留言,一定尽快回复!(大家可以去看我的专栏,是所有文章的目录)
文章字体风格:
红色文字表示:重难点★✔
蓝色文字表示:思路以及想法★✔
如果大家觉得有帮助的话,感谢大家帮忙
点赞!收藏!转发!
本博客带大家一起学习,我们不图快,只求稳扎稳打。
由于我高三是在家自学的,经验教训告诉我,学习一定要长期积累,并且复习,所以我推出此系列。
只求每天坚持40分钟,一周学5天,复习2天
也就是一周学10道题
60天后我们就可以学完81道题,相信60天后,我们一定可以有扎实的代码基础!我们每天就40分钟,和我一起坚持下去吧!
qq群:878080619
第二十六天【考研408-数据结构(笔试)】
- 二十三、因式分解
- 1. 质因数的个数
- 2. 约数个数
- 3. 阶乘的末尾0(上海交通大学考研机试题)
- 4. 整除问题(上海交通大学考研机试题)
二十三、因式分解
1. 质因数的个数
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
while (cin >> n)
{
int res = 0;
for (int i = 2; i * i <= n; i ++ )
if (n % i == 0)
{
while (n % i == 0)
{
n /= i;
res ++ ;
}
}
if (n > 1) res ++ ;
cout << res << endl;
}
return 0;
}
2. 约数个数
#include <iostream>
using namespace std;
int n, x;
int main()
{
cin >> n;
while (n -- )
{
cin >> x;
int res = 0;
for (int i = 1; i <= x / i; i ++)
if (x % i == 0)
{
res ++ ;
if (x / i != i) res ++ ;
}
cout << res << '\n';
}
return 0;
}
3. 阶乘的末尾0(上海交通大学考研机试题)
本题考的是理解末尾0
末尾的0 就表示 因数中有多少个10
那么也就是有多少个因数2 和 5
由于因数2的个数一定大于5的个数
所以就看有多少个因数5就可以了
#include <iostream>
#include <cstring>
#include <algorithm>
using namespace std;
int main()
{
int n;
cin >> n;
int res = 0;
while (n / 5) res += n / 5, n /= 5;
cout << res << endl;
return 0;
}
4. 整除问题(上海交通大学考研机试题)
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
vector<vector<int>> get_ds(int n)
{
vector<vector<int>> res;
for (int i = 2; i * i <= n; i ++ )
if (n % i == 0)
{
int s = 0;
while (n % i == 0) n /= i, s ++ ;
res.push_back({i, s});
}
if (n > 1) res.push_back({n, 1});
return res;
}
int get_p(int n, int p)
{
int res = 0;
while (n / p) res += n / p, n /= p;
return res;
}
int main()
{
int n, m;
cin >> n >> m;
auto ds = get_ds(m);
int res = 1e8;
for (int i = 0; i < ds.size(); i ++ )
{
int p = ds[i][0], s = ds[i][1];
res = min(res, (get_p(n, p) / s));
}
cout << res << endl;
return 0;
}