UVa 10006 Carmichael Numbers (快速幂运算)
来源:互联网 发布:c语言复制字符串函数 编辑:程序博客网 时间:2024/06/09 19:32
快速幂运算---反复平方法
* [题意]
* 输入n,若满足如下两个条件,则n是Carmichael number
* 1、n不是素数
* 2、对于所有a(2<=a<n),有(a^n)%n = a
*
* [解题方法]
* 快速幂取模,注意运算过程中的乘法溢出int
*/
#include <cstdio>using namespace std;typedef long long ll;bool is_prime(ll x){ for (int i = 2; i * i <= x; i++){ if (x % i == 0) return 0; } return 1;}ll mod_pow(ll x, ll n, ll mod){ ll res = 1; while (n > 0){ if (n & 1) res = res * x % mod; //如果二进制最低位为1,则乘上x^(2^i) x = x * x % mod; //将x平方 n >>= 1; } return res;}int main(){ ll n; while (scanf("%lld", &n), n){ bool flag = 1; if (is_prime(n)) flag = 0; for (int i = 2; i < n && flag; i++){ if (mod_pow(i, n, n) != i) flag = 0; } if (flag) printf("The number %d is a Carmichael number.\n", n); else printf("%d is normal.\n", n); } return 0;}
#include <cstdio>using namespace std;typedef long long ll;bool is_prime(ll x){ for (int i = 2; i * i <= x; i++){ if (x % i == 0) return 0; } return 1;}ll mod_pow(ll x, ll n, ll mod){ if (n == 0) return 1; ll res = mod_pow(x * x % mod, n / 2, mod); if (n & 1) res = res * x % mod; return res;}int main(){ ll n; while (scanf("%lld", &n), n){ bool flag = 1; if (is_prime(n)) flag = 0; for (int i = 2; i < n && flag; i++){ if (mod_pow(i, n, n) != i) flag = 0; } if (flag) printf("The number %d is a Carmichael number.\n", n); else printf("%d is normal.\n", n); } return 0;}
1 0
- UVa 10006 Carmichael Numbers (快速幂运算)
- Uva 10006 Carmichael Numbers 快速幂
- uva 10006 Carmichael Numbers(快速幂)
- UVA 10006 - Carmichael Numbers 快速幂
- Uva 10006-Carmichael Numbers(快速幂)
- Uva 10006 Carmichael Numbers (快速幂)
- UVA 10006 Carmichael Numbers(快速幂)
- UVA 10006 - Carmichael Numbers (快速幂+筛素数)
- uva 10006 Carmichael Numbers(快速幂+素数)
- UVa 10006 Carmichael Numbers (快速幂 + 素性测试)
- UVA - 10006 - Carmichael Numbers (快速幂+素数判断)
- UVA - 10006 Carmichael Numbers(素数筛+快速幂)
- Uva 10006 Carmichael Numbers(数论、快速幂、素数筛法)
- UVA 10006 Carmichael Numbers(数论+快速幂)
- UVA 10006 Carmichael Numbers(数论+快速幂)
- UVA 10006 - Carmichael Numbers(快速幂取模)
- UVA 10006 - Carmichael Numbers(快速幂取模)
- UVA 10006 Carmichael Numbers(快速幂取模)
- 深入浅出UML类图(四)
- Android 学习记录-获取天气API
- Java 基础面试 每日一点Java源文件(*.java)——>Java编译器——>字节码文件(*.class)——>类装载器——>字节码校检器—— >解释器——>操作系统(Windows、Linux
- java汉字中首字母排序
- JSON详解
- UVa 10006 Carmichael Numbers (快速幂运算)
- 哈理工OJ 2035 Diablo(多次广度优先搜索+详解)
- 【算法总结--数组相关】双指针法的常见应用。
- 关于 chartjs插件的用法
- MySQL性能优化的21个最佳实践
- 关于ios9.0之后不能打开https的解决办法
- 深入浅出UML类图(五)
- 关于程序员的几个阶段
- 约瑟夫环问题