uva 10006 快速幂
2015-07-27 12:54
357 查看
比较基本的数论题目,不过《挑战程序设计》上说这个题有不用幂运算求解的两种方法,一种复杂度为根号n,一种是O(n)预处理,O(1)判定,我还没有想出来....
快速幂的方法:
快速幂的方法:
#include <iostream> #include <cstring> #include <cmath> using namespace std; typedef long long ll; const int N = 65001; bool visit ; void sieve( int n ) { int r = sqrt( n + 0.5 ); memset( visit, 0, sizeof(visit) ); visit[0] = visit[1] = 1; for ( int i = 2; i <= r; i++ ) { if ( !visit[i] ) { for ( int j = i * i; j <= n; j += i ) { visit[j] = 1; } } } } ll pow_mod( ll a, ll n, ll mod ) { ll ans = 1, w = a % mod; while ( n ) { if ( n & 1 ) { ans = ans * w % mod; } w = w * w % mod; n >>= 1; } return ans; } int main () { sieve( N - 1 ); int n; while ( cin >> n, n ) { bool flag = true; if ( visit ) { for ( int x = 2; x < n; x++ ) { int tmp = pow_mod( x, n, n ); if ( tmp != x ) { flag = false; break; } } } else { flag = false; } if ( flag ) { cout << "The number " << n << " is a Carmichael number." << endl; } else { cout << n << " is normal." << endl; } } return 0; }
相关文章推荐
- 【线段树】spoj GSS2 Can you answer these queries II
- 括号匹配算法
- 【C/C++学院】0724-堆栈简介/静态区/内存完成篇/多线程
- Linux进程类型
- mysql 备份数据库 mysqldump
- Linux进程类型 2015-07-27 12:52 8人阅读 评论(0) 收藏
- docker固定IP容器构造
- 【问底】徐汉彬:Web系统大规模并发——电商秒杀与抢购
- HDU5312.Sequence
- [leetcode-15]3Sum(java)
- dubbo总结(5)——使用maven构建可执行jar包
- Leetcode 27 Remove Element
- CodeForces 362A - Two Semiknights Meet
- HDU 2159 FATE(二维背包)
- 背包九讲——0-1背包问题
- 04-树8. Complete Binary Search Tree (30)
- Thinkphp M 中的 where 失效问题
- 固定ListView的高度
- EALayout 第三节 依赖多个控件布局
- 关于java反射的那点事