博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
求任意数阶乘最后一位
阅读量:7103 次
发布时间:2019-06-28

本文共 1845 字,大约阅读时间需要 6 分钟。

今天看完了离散关于求模的那一章然后顿时想到了这个的解法…ACM大神勿喷…(我不是竞赛的……)

/*    Author: Latyas            Jilin University            思路:防止5的影响,将n!分解为2^a*5^b*c1c2c3c4...cn*/#include 
#include
int TWO = 0;int FIVE = 0;int Run(int);int fuckTwoFive(int); int CongruenceExp(int base,int exp,int m); //同余幂算法int main(){ int temp = 1; while(scanf("%d",&temp)) { printf("%d -> %d\n",temp,Run(temp)); TWO = FIVE = 0; } system("pause"); return 0;}int Run(int input){ if(input == 1 || input == 0) return 1; int result = 1; for(int i = 1;i<=input;i++) { result *= fuckTwoFive(i)%10; //根据求模公式的变形防止数值膨胀 result %= 10; } TWO -= FIVE; /* 算2的n次幂模10的结果有两个方法 1.2^n % 10的结果是循环出现的,注释掉的代码即这种方法,有特殊性 2.更一般的算法是2^t 将t展开为二进制,即用同余幂算法求模 这里用这个方法,因为代码看上去更简洁了 =w= */ int Tworesult = 1; /* static const int map2[5] = {1,2,4,8,6}; for(int i = 0;i<=TWO/4;i++) { if((Tworesult *= 6) > 10) Tworesult %= 10; } Tworesult = (Tworesult*map2[TWO%4])%10; */ Tworesult = CongruenceExp(2,TWO,10); //同余幂求模 result = (result*Tworesult)%10; return result;}int fuckTwoFive(int input){ if(input%5 == 0) { while(1) { if(input%5 != 0) break; input /= 5; FIVE++; } } if(input%2 == 0) { while(1) { if(input%2 != 0) break; input /= 2; TWO++; } } return input;}int CongruenceExp(int base,int exp,int m){ int k = 0; int temp = exp; for(int i = 0 ;;i++) { if((temp/=2) == 0) { k = i; break; } } int x = 1; int power = base%m; for(int i = 0;i<=k;i++) { if(exp&(1<

转载于:https://www.cnblogs.com/latyas/archive/2012/08/01/2617627.html

你可能感兴趣的文章
高性能爬虫——asynicio模块
查看>>
Docker容器的数据卷(data volume),数据卷容器,数据卷的备份和还原。
查看>>
win10 字体渲染优化 色彩调整
查看>>
分享基于MemoryCache(内存缓存)的缓存工具类,C# B/S 、C/S项目均可以使用!
查看>>
VC++:ActiveX Test Container
查看>>
iOS知识点汇总
查看>>
butterknife用法总结
查看>>
Win8 Metro(C#)数字图像处理--2.55OSTU法图像二值化
查看>>
ReactiveCocoa 中 RACSignal 所有变换操作底层实现分析(上)
查看>>
Service Fabric本地开发部署修改数据目录
查看>>
php面试题
查看>>
Hexo NexT 博客本地搭建指南
查看>>
快速使用CSS Grid布局,实现响应式设计
查看>>
这并不是习惯,而是忍耐力变强了
查看>>
重看计算机基础1:数据线、地址线,按字、按字节寻址。
查看>>
oracle 11g亿级复杂SQL优化一例(数量级性能提升)
查看>>
Qt Md5应用示例
查看>>
tensorflow 笔记11:tf.nn.dropout() 的使用
查看>>
路由事件
查看>>
WPF实现选项卡效果(1)——使用AvalonDock
查看>>