蓝桥杯 约数个数省 2023模拟赛 知识点:数论

100 阅读1分钟

3.约数个数【省模拟赛】 - 蓝桥云课 (lanqiao.cn)

文章解析:约数个数 - 掘金 (juejin.cn)

#include<bits/stdc++.h>
using namespace std;
unordered_map<int,int>mp;
int res;
void solve()
{
	int n=2023;
	for(int i=2;i*i<=n;i++)
	{
	   while(n%i==0)  //能被i整除说明是n的约数
	   {
	   	 mp[i]++;  // 存一下n的每个约数的指数
		   n/=i;     //把i除尽
	   }
	}   
	if(n>1)mp[n]++;  //最后一个大于根号n的约数 

	res=1;
	for(auto it=mp.begin();it!=mp.end();it++)
	{
                 
                 //求约数个数的公式
		res=res*(it->second+1);  //约数个数=各个约数的指数+1 的乘积
	}
}
int main()
{
	int t=1;
	while(t--)
	solve();
	
	cout<<res<<endl;
	return 0;
	
}