优化错误?
查看原帖
优化错误?
1332453
__Florie_楼主2024/6/27 09:20

看完这道题,我就想有没有能优一点(不要挨个遍历)的做法,就想到了分组(显然5的倍数每5个出现一次),一个组中各数的贡献都是一样的(阶乘中因子为5的倍数的数的个数),就有了下面这个错误代码


请大佬验货!!

#include<bits/stdc++.h>
using namespace std;
#define ll long long

int n,i;
ll sum,op=1,soso=25;

int main(){
	cin>>n;
	for(i=9;i<=n;i+=5){
		sum=sum+5*op;//每5个数为一组,如:5,6,7,8,9的阶乘,都贡献一个 
		op++;
		if(i==soso-1)//soso表示质因数分解后本身多贡献一个,如:25 
		{
			op++;soso*=5;
		}
	}
	for(int j=i-4;j<=n;j++){
		sum=sum+op;//剩余不满一组的数,如:15,16,17  
	}
	cout<<sum;
	return 0;
}
2024/6/27 09:20
加载中...