hdu4335 (指数循环节)
2013-08-10 19:36
363 查看
hdu4335 (指数循环节)
分类: 数论2013-03-0116:20 63人阅读 评论(0) 收藏 举报
题目:What is N?
本题好坑人,居然还有那种情况。。。
[cpp] view
plaincopy
#include <stdio.h>
#define LLU unsigned long long
LLU Euler(LLU n)
{
LLU i;
LLU ret=n;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
ret=ret-ret/i;
while(n%i==0) n/=i;
}
}
if(n>1)
ret=ret-ret/n;
return ret;
}
LLU quick_mod(LLU a,LLU b,LLU m)
{
LLU ans=1;
while(b)
{
if(b&1)
{
ans=ans*a%m;
b--;
}
b>>=1;
a=a*a%m;
}
return ans;
}
LLU f[100001];
int main()
{
int t,T,i,k,l,flag;
LLU b,p,m,phi,ans;
scanf("%d",&T);
for(t=1;t<=T;t++)
{
ans=0;flag = 0;
scanf("%I64u%I64u%I64u",&b,&p,&m);
if(b==0&&p==1&&m==18446744073709551615ull)
{
printf("Case #%d: 18446744073709551616\n",t);
continue;
}
phi=Euler(p);
f[0]=1;
if(b==0)
ans++;
for(i=1;i<=m;i++)
{
f[i] = f[i-1]*i;
if(f[i]>=phi)
{
f[i]=f[i]%phi;
flag=1;
if(f[i]==0)
break;
}
if(flag)
{
if(quick_mod(i,f[i]+phi,p)==b)
ans++;
}
else
{
if(quick_mod(i,f[i],p)==b)
ans++;
}
}
for(k=0;i<=m&&k<p;i++,k++)
if(quick_mod(i,phi,p)==b)
ans = ans+1+(m-i)/p;
printf("Case #%d: %I64u\n",t,ans);
}
return 0;
}
NEFU 691(欧拉函数与指数循环节)
分类: 数论2013-04-3006:08 84人阅读 评论(0) 收藏 举报
题目:Remainder Calculator
[cpp] view
plaincopy
#include <iostream>
#include <string.h>
#include <stdio.h>
using namespace std;
typedef long long LL;
const int N=105;
LL p
,a
;
LL phi(LL n)
{
LL rea=n,i;
for(i=2;i*i<=n;i++)
{
if(n%i==0)
{
rea=rea-rea/i;
while(n%i==0) n/=i;
}
}
if(n>1)
rea=rea-rea/n;
return rea;
}
void Init(LL m)
{
p[0]=m;
for(LL i=1;i<105;i++)
p[i]=phi(p[i-1]);
}
LL Solve(LL k,LL *up)
{
LL i,j,chk;
LL m=p[k];
LL res,num,next,num_is_big=0;
if (m==1)
{
if(a[k]>1) *up=1;
else *up=0;
return 0;
}
if (a[k]>=m) {*up=1; return 0;}
num=1;
for(i=2;i<=a[k];i++)
{
num=num*i;
if (num>=m) num_is_big=1, num%=m;
}
next=Solve(k+1,&chk);
if (chk==1) next+=phi(m);
res=1; *up=0;
for(i=0;i<next;i++)
{
res=res*num;
if (res>=m) *up=1,res%=m;
if (num_is_big) *up=1;
}
return res;
}
int main()
{
LL n,t,m,i;
cin>>t;
while(t--)
{
cin>>n>>m;
for(i=0;i<n;i++)
cin>>a[i];
if(m==1)
{
puts("0");
continue;
}
Init(m);
cout<<Solve(0,&i)<<endl;
}
return 0;
}
相关文章推荐
- 【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】
- hdu 3307 简单的指数循环节
- hdu 2837 Calculation【欧拉函数,快速幂求指数循环节】
- 2016多校训练一 PowMod,hdu5728(欧拉函数+指数循环节)
- 指数循环节 处理A^B 问题 Super A^B mod C + Calculation
- 上帝与集合的正确用法 HYSBZ - 3884 (指数循环节)
- 指数循环节 求A的B次方模C
- 指数循环节问题
- hdu 2837 Calculation 指数循环节
- 【关于 A^x = A^(x % Phi(C) + Phi(C)) (mod C) 的若干证明】【指数循环节】
- 【HDU5728 PowMod】【欧拉函数+指数循环节】【欧拉函数积性性质+无穷幂迭代】
- hdu 5895 Mathematician QSC 指数循环节+矩阵快速幂
- FZU oj 1759 Super A^B mod C (快速幂+指数循环节+欧拉函数)
- uva 10692 - Huge Mods 指数循环节
- HDU 2837 Calculation(指数循环节)
- FZU 1759-Super A^B mod C(指数循环节)
- bzoj 3884 上帝与集合的正确用法 指数循环节
- UVa10692,Huge Mod,数论,欧拉定理,指数循环节
- 指数循环节 uva 10692
- uva10692-指数循环节