HDU 1395 欧拉函数的基本应用
来源:互联网 发布:魔兽争霸数据修改器 编辑:程序博客网 时间:2024/06/03 21:39
题目给的很明显就是欧拉函数的表达式,由于底是2,所以被取模的数只要是奇数,就能保证与2互质,而定义在一数集上的取模,是一个循环群, 若2^n%p==1,phi(p)是一个循环节,单不能保证它是最短的,所以要遍历它的因数,来找到最小的循环节,就是所求.#include <iostream>#include <cstdio>#include <algorithm>#include <cstring>#include <cmath>#define MAX 1000007using namespace std;int n;char x;int phi[MAX],m[MAX],p[MAX],pt; void init ( ){ pt = 0; memset ( m , 0 , sizeof ( m )); phi[1] = 1; int k; for ( int i = 2 ; i < MAX; i++ ) { if ( !m[i] ) p[pt++]=m[i]=i,phi[i]=i-1; for ( int j=0;j<pt&&(k=i*p[j]) < MAX-1;j++) { m[k] = p[j]; if ( m[i] == p[j] ) { phi[k] = phi[i]*p[j]; break; } else phi[k] = phi[i]*(p[j]-1); } } }int pow2 ( int index , int mod ){ if ( index == 0 ) return 1; int temp = pow2 ( index /2 , mod )%mod; if ( index &1 ) return (temp*temp*2)%mod; else return temp*temp%mod;} int main ( ){ init(); while ( ~scanf ( "%d", &n ) ) { if ( !(n&1) || n == 1 ) printf( "2^? mod %d = 1\n",n ); else { int temp = phi[n]; for ( int i = 2 ; i <= temp ; i++ ) if ( temp%i==0) { if ( pow2 ( i, n ) != 1 ) continue; printf ( "2^%d mod %d = 1\n" , i , n ); break; } } } }
0 0
- HDU 1395 欧拉函数的基本应用
- GCD +hdu+欧拉函数的应用
- Hdu 2824 欧拉函数的应用
- HDU 2588 欧拉函数的应用
- hdu 2588 欧拉函数的应用
- HDU 3501 Calculation 2(欧拉函数的应用)
- hdu 3501(欧拉函数的应用)
- GCD HDU杭电2588 【欧拉函数的应用】
- HDU 2588(欧拉函数的应用)
- hdu 5728 (欧拉函数性质的应用)
- HDU 3501 数论 欧拉函数的应用
- HDU -- 3501 Calculation 2 【欧拉函数性质的应用】
- hdu 5514 (欧拉函数的应用)
- poj2407 Relatives 欧拉函数基本应用
- 欧拉函数的应用
- 欧拉函数的应用
- -----欧拉函数的应用
- Relatives+水题+欧拉函数+素数打表的基本应用+poj
- xcode 6 创建pch文件
- c++ 随机数产生
- 如何让IOS状态栏变为白色?
- 【Java】线程并发拷贝程序
- android lint工具
- HDU 1395 欧拉函数的基本应用
- mysql中utf8_bin、utf8_unicode_ci、utf8_general_ci编码区别
- java中实现LRU算法
- thinkphp框架开启页面gzip压缩
- DSP错误总结!
- Jquery中eval执行的必须是满足json格式
- android学习笔记(四)--添加ListView
- shell命令行中操作HBase数据库
- 如何拥有一个游戏策划的思维