题目意思 求n的阶乘能被21除几次
Problem description
As a youth of 21st century, Ming loves the number 21. One day, he met a problem. By given a positive integer he must calculate how many n! can be divided exactly by 21 at the same time? For example, 7! can only be divided by 21 exactly 1 times at the same time. If n is little, we can directly calculate the results simple. However, n is very large, Ming’s math is poor. Can you help Ming to solve this problem?
Input
Input a integer number n, 0 < n < 109, end with EOF.
Sample Input
7 9 14
Sample Output
1 1 2
我的思路,一开始我就想到能被21整除,那么21可以化成3*7;
那么题目的意思就可以化成N的阶乘能除以7几次,嗯,想法没错,但是怎么把7找出来想了大概两个月
后来灵光一闪,枚举7的次幂,多谢楼上老王
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<cmath>
using namespace std;
int main()
{
long long a[100];
a[0]=1;int i;
for(i=1;i<=10;i++)
{
a[i]=a[i-1]*7;
}
long long n;
long long sum=0;
while(scanf("%lld",&n)!=EOF)
{
sum=0;
for(i=1;i<=10;i++)
{
if(a[i]>n)
break;
else
{
sum+=n/a[i];
}
}
printf("%lld\n",sum);
}
return 0;
}