CF633B
Posted pedestrian6
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CF633B相关的知识,希望对你有一定的参考价值。
真的是好题啊
题意:给出m<=10^5,求出有多少个数满足其阶乘末尾有且仅有m个0
solution:地理课上发呆胡出来的。像这种一眼暴力都打不了还毒瘤的肯定xi数论啊第一眼还是蒙圈了。
x末尾有m个0,就是x!分解完质因数以后有且仅有m个2*5,因为x!是由1--x的所有数乘起来的,2的次数增长得快,所以只考虑5,然后枚举1-x有1*5(质因数5次数++),2*5(质因数5次数++)。
但这样有个问题,5*5给x!5的次数增加了不是1而是2,5*25给x!5的次数增加了3,所以枚举5*i时还要从i中分解5有几次,累加
1 #include<iostream>
2 #include<cstdio>
3 using namespace std;
4 int main(){
5 int m,i,sum=0; cin>>m;
6 for (i=1;;i++){
7 int num=0,j=i;
8 while (j>=5&&j%5==0) num++,j/=5;
9 //i可以分解质因数分解出多少个5
10 sum+=num+1;
11 if (sum==m){
12 printf("5\n");
13 for (j=5*i;j<=5*i+4;j++)
14 printf("%d ",j);
15 return 0;
16 }
17 if (sum>m){
18 printf("0"); return 0;
19 }
20 }
21 }
以上是关于CF633B的主要内容,如果未能解决你的问题,请参考以下文章