Luogu P1134 阶乘问题 【数学/乱搞】 By cellur925
2024-09-08 04:46:37
输入输出格式
输入格式:
仅一行包含一个正整数 NN 。
输出格式:
一个整数,表示最右边的非零位的值。
输入输出样例
输入样例#1:
12
输出样例#1:
6
说明
USACO Training Section 3.2
毒瘤markdown复制不下来啊qwq。
这是一道数学题,也可以称为乱搞题。像我这样的蒟蒻见到数论一定先打表。这次打表很顺利。
用程序跑到了23!,再结合win7的计算器,苟且搞到了25!以内的数据。继续冷静分析。发现除了1!,其他的结果(尾数最靠右且不为0)只可能为2,4,6,8.再略微观察以下,由于求非零的最后一位,所以我们每次都不需保留完整信息,记着两乘数的尾数然后再记录积的尾数即可。结果在5!,15!,25!时,这个法则不适用,乘后积为0,如果放任他们这样,就会gg了。
那就尝试特判,找出的规律要求我再记下倒数第二位数字是什么。然鹅...沿着这样的思路延续了十几分钟(大概),我再也推不下去了qwq。并没有规律啊...
于是我打开了tijie,看到大家很少有严格推导证明,都是暴力模拟(?),然而他们打暴力打的还非常有道理。
好吧,我可能不得不相信,数论题就是在得知少部分结论的基础上乱搞。
ans至少保留8位数字,因为最大的数为8位,所以每次ans%=10改成%=100000000就行了(这句是从题解抄来的)
然后在注意开ll,最后输出再取个膜就星了。
code
#include<cstdio>
#include<algorithm>
#include<cmath> using namespace std;
typedef long long ll; ll n,pre; int main()
{
scanf("%lld",&n);
pre=;
for(int i=;i<=n;i++)
{
pre=pre*i;
while(pre%==) pre/=;
pre%=;
}
printf("%lld",pre%);
return ;
}
最新文章
- C#基础-邮件发送
- MS SQL 排序规则总结
- 深入理解Java:类加载机制及反射
- iOS:如何将自己的SDK用CocoaPods管理
- JavaEE基础(十二)
- Android中 服务里的方法抽取成接口
- Mac下的SVN客户端工具Cornerstone使用教程
- angularJS+requireJS并集成karma测试实践
- 设置COOKIE过期时间的方法
- <;三>;面向对象分析之UML核心元素之参与者
- Socket简单实现数据交互及上传
- elasticsearch 学习笔记
- ogg12c_静默安装
- 大数据---Ranger-1
- F#周报2019年第13期
- ssl证书 以及phpstudy配置ssl证书
- 通过 txt 文件批量导入需要批量处理的数据的标识字段
- Python从入门到放弃系列(Django/Flask/爬虫)
- linux下mysql 8.0忘记密码后重置密码
- sqoop导入导出