Description has only two Sentences

Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)
Total Submission(s): 124 Accepted Submission(s): 55
 
Problem Description
an = X*an-1 + Y and Y mod (X-1) = 0.
Your task is to calculate the smallest positive integer k that ak mod a0 = 0.
 
Input
Each line will contain only three integers X, Y, a0 ( 1 < X < 231, 0 <= Y < 263, 0 < a0 < 231).
 
Output
For each case, output the answer in one line, if there is no such k, output "Impossible!".
 
Sample Input
2 0 9
 
Sample Output
1
 
Author
WhereIsHeroFrom
 
Source
HDOJ Monthly Contest – 2010.02.06
 
Recommend
wxl
 
/*
题意:如题给出的递推公式,让你求出最小的k满足ak mod a0 ==0; 如果没有的话输出impossible 初步思路:an=an-1*X+Y => an=Xn*a0+(1+X1+X2+.....+Xn-1)*Y (里面有一个等比数列)
=> 然后两边同时膜a0 得到 an mod a0 = ( (Xn -1) * Y ) mod a0 / (X -1) = 0
=> 令 T=Y/(X-1) 得到0 =T (Xn - 1) mod a0 (T是任意整数 )
=> 将 mod a0 移到左边
=> 0 (mod a0) = T (Xn - 1)
(这里的mod是提出来的)
=> 令p=__gcd(a0,T) 然后得到
=> 0 (mod a0/p) = T/p (Xn - 1) = 0 (mod a0') =T' (Xn - 1)
=> 此时a0' 和T' 互质了 那么得到
=> Xn-1=0 (mod a0') 如果(Xn -1 )mod a0' !=0那么就无解 即:
=> Xn mod a0' ==1 否则就是无解的情况
然后就没有思路了.......
#改进:由上一步能得出来 X^n=1(mod a0')
=> 欧拉定理,X^euler(a0')=1(mod a0');//其中X和a0'必须是互质的,不然没有解
=> 如果是互质的,那么然后就可以从a0'中的质因子枚举,然后快速幂就可以了
#感悟:!!!质因子忘记排序了,错了两罚!!!!想吐,一天了,就想了这一个题。。。。
*/
#include<bits/stdc++.h>
#define ll long long
using namespace std;
ll X,Y,A;
ll T; /*******************分解质因子模板*********************/
bool comp(ll a,ll b){
return a<b;
}
vector<ll>v;
void find(ll n)//分解质因子
{
v.clear();
ll m=(ll)sqrt(n+0.5);
for(ll i=;i<m;i++)
if(n%i==){
v.push_back(i);
v.push_back(n/i);
}
if(m*m==n) v.push_back(m);
sort(v.begin(),v.end(),comp);
}
/*******************分解质因子模板*********************/ /************快速幂模板****************/
ll power(ll n,ll x,ll mod){
if(x==) return ;
ll t=power(n,x/,mod);
t=t*t%mod;
if(x%==) t=t*n%mod;
return t;
}
/************快速幂模板****************/ /**************************欧拉函数模板*****************************/
//直接求解欧拉函数
ll euler(ll n){ //返回euler(n)
ll res=n,a=n;
for(int i=;i*i<=a;i++){
if(a%i==){
res=res/i*(i-);//先进行除法是为了防止中间数据的溢出
while(a%i==) a/=i;
}
}
if(a>) res=res/a*(a-);
return res;
}
/**************************欧拉函数模板*****************************/ int main(){
//freopen("in.txt","r",stdin);
while(scanf("%lld%lld%lld",&X,&Y,&A)!=EOF){
if(Y==){
puts("");
continue;
}
T=Y/(X-);
ll p=__gcd(T,A);//最大公因子
//化简到最简单
T/=p;
A/=p;//a0'
//cout<<T<<" "<<A<<endl;
if(__gcd(X,A)!=){//如果这两个数不是互质的,由欧拉定理的肯定是无解的
printf("Impossible!\n");
}else{
//X^euler(a0')=1(mod a0')
ll cur=euler(A);
find(cur);//分解质因子,打到p中
//cout<<v.size()<<endl;
for(int i=;i<v.size();i++){
//cout<<power(X,v[i],A)<<endl;
if(power(X,v[i],A)==){
printf("%lld\n",v[i]);
break;
}
}
}
}
return ;
}

Description has only two Sentences(欧拉定理 +快速幂+分解质因数)的更多相关文章

  1. BZOJ 3884: 上帝与集合的正确用法 扩展欧拉定理 + 快速幂

    Code: #include<bits/stdc++.h> #define maxn 10000004 #define ll long long using namespace std; ...

  2. hdu 3307 Description has only two Sentences (欧拉函数+快速幂)

    Description has only two SentencesTime Limit: 3000/1000 MS (Java/Others) Memory Limit: 65536/32768 K ...

  3. 2^x mod n = 1(欧拉定理,欧拉函数,快速幂乘)

    2^x mod n = 1 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tot ...

  4. HDU4549 M斐波那契数列 矩阵快速幂+欧拉函数+欧拉定理

    M斐波那契数列 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Total Sub ...

  5. Super A^B mod C (快速幂+欧拉函数+欧拉定理)

    题目链接:http://acm.fzu.edu.cn/problem.php?pid=1759 题目:Problem Description Given A,B,C, You should quick ...

  6. hdu 2462(欧拉定理+高精度快速幂模)

    The Luckiest number Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Othe ...

  7. XMU 1615 刘备闯三国之三顾茅庐(三) 【欧拉函数+快速幂+欧拉定理】

    1615: 刘备闯三国之三顾茅庐(三) Time Limit: 1000 MS  Memory Limit: 128 MBSubmit: 45  Solved: 8[Submit][Status][W ...

  8. [SDOI2010] 古代猪文 (快速幂+中国剩余定理+欧拉定理+卢卡斯定理) 解题报告

    题目链接:https://www.luogu.org/problemnew/show/P2480 题目背景 “在那山的那边海的那边有一群小肥猪.他们活泼又聪明,他们调皮又灵敏.他们自由自在生活在那绿色 ...

  9. URAL 1141. RSA Attack(欧拉定理+扩展欧几里得+快速幂模)

    题目链接 题意 : 给你n,e,c,并且知道me ≡ c (mod n),而且n = p*q,pq都为素数. 思路 : 这道题的确与题目名字很相符,是个RSA算法,目前地球上最重要的加密算法.RSA算 ...

随机推荐

  1. 软件工程个人第二小项目——wc

    github源码和工程文件地址:https://github.com/HuChengLing/wc 基本要求:要实现wc的基本功能即文件中字符数.单词数.行数的统计. 主要功能:文件中字符数.单词数. ...

  2. spring boot / cloud (十八) 使用docker快速搭建本地环境

    spring boot / cloud (十八) 使用docker快速搭建本地环境 在平时的开发中工作中,环境的搭建其实一直都是一个很麻烦的事情 特别是现在,系统越来越复杂,所需要连接的一些中间件也越 ...

  3. 数据库服务器构建和部署列表(For SQL Server 2012)

    前言 我们可能经常安装和部署数据库服务器,但是可能突然忘记了某个设置,为后来的运维造成隐患.下面是国外大牛整理的的检查列表. 其实也包含了很多我们平时数据库配置的最佳实践.比如TEMPDB 文件的个数 ...

  4. 初学node.js有感二

    node.js进阶 一.回顾与继续   对于一种语言的认识都是经历这样的一个过程的,首先从原生的环境(CMD)中开始学习,找到一门语言之间各种引用的本质和相互之间的调用方式,明澈各种依赖关系,在这个基 ...

  5. Hive任务优化(1)

    一个Hive查询生成多个Map Reduce Job,一个Map Reduce Job又有Map,Reduce,Spill,Shuffle,Sort等多个阶段,所以针对Hive查询的优化可以大致分为针 ...

  6. ExtJS配置与入门项目创建

    Sencha Cmd下载:http://cdn.sencha.com/cmd/6.5.2/jre/SenchaCmd-6.5.2-windows-64bit.zip ExtJS-6.2.0下载:htt ...

  7. java基础(Fundamental)

    第一节 java开发环境 1.Linux操作系统 1)开源的操作系统.免费,主要作为服务器操作系统, 而Java主要是服务器端开发,所以部署环境都是Linux 2)Linux与Windows目录结构的 ...

  8. PHP通过访客来路获取搜索关键词的方法

    <?php class keyword{ public function getKeyword($referer){ if(strpos($referer,"http://www.ba ...

  9. Elixir游戏服设计四

    上章说到我们要引入syn https://github.com/ostinelli/syn/ 看过文档,它并没有直接提供{via, Module, Name} 相关的方法.我们需要封装一下. Name ...

  10. 【转】Python装饰器与面向切面编程

    原文请参考: http://www.cnblogs.com/huxi/archive/2011/03/01/1967600.html 今天来讨论一下装饰器.装饰器是一个很著名的设计模式,经常被用于有切 ...