第十一届蓝桥杯B组国赛C/C++ - C题阶乘约束 - 唯一分解定理
题意
100的阶乘有多少个约数?
唯一分解定理
唯一分解定理:N = p1a1*p2a2p3^a3 ... *pn^an(其中p1、p2、... pn为N的因子,a1、a2、... 、an分别为因子的指数)
求N的因子个数:sum=(1 + a1)*(1 + a2)*(1 + a3)*...*(1 + an)
本题答案是:39001250856960000
类似题见:https://www.cnblogs.com/OFSHK/p/11329177.html
AC代码
#include<bits/stdc++.h>
using namespace std;
#define inf 0x3f3f3f3f
typedef long long ll;
bool book[110];
int p[110],a[110],cnt=0;
//180=2*2*3*3*5=2^2 * 3^2 *5
//180的正约数个数=(1+2)(1+2)*(1+1)=18
//void init() // 求100以内的所有素数(包括100)
//{
// for(int i=1; i<=100; i++)
// {
// if(i==1) continue;
// if(!book[i])
// {
// p[cnt++]=i;
// for(int j=i+i; j<=100; j+=i)
// book[j]=1;
// }
// }
//}
//ll yinzi(int a)//求N的因子个数sum=(1 + a1)*(1 + a2)*(1 + a3)*...*(1 + an);
//{
// ll sum=1;
// for(int i=0; i<cnt&&(p[i]*p[i]<=a); i++)
// {
// if(p[i]>a) break;
// if(a%p[i]==0)
// {
// ll x=0;
// while(a%p[i]==0)
// a/=p[i],x++;
// sum*=(1+x);
// }
// }
// if(a>1)//说明还剩有1个素数因子没有被算入,根据公式可得
// sum=sum*(1+1);
// return sum;
//}
void yinzi()
{
for(int i=2; i<=100; i++)
{
int n=i;
for(int j=2; j<=n/j; j++)
{
while(n%j==0)
a[j]++,n/=j;
}
if(n>1) a[n]++;
}
}
int main()
{
// init();
yinzi();
ll ans=1;
for(int i=2; i<=100; i++)
{
// ans*=yinzi(i);
if(a[i]) ans=ans*(a[i]+1);
}
cout<<ans<<endl;
return 0;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」
2020-04-15 POJ1113-Wall-求凸包周长
2020-04-15 POJ3348-Cows-求凸包面积