given a,b,c, you should quickly calculate the result of a^b mod c. (1<=a,c<=1000000000,1<=b<=10^1000000).
there are multiply testcases. each testcase, there is one line contains three integers a, b and c, separated by a single space.
for each testcase, output an integer, denotes the result of a^b mod c.
3 2 4
2 10 1000
a^b mod c = ?
b<=10^1000000,超級大數了,a,c均為long long範圍內。
因為資料很大所以本題用降冪公式,嘛我的菜雞水平也只能直接套公式了嚶
降冪公式
φ(m)(phi哈哈哈哈是這個音來著)是尤拉函式。
那麼尤拉函式
對於乙個正整數n,小於n且和n互質的正整數(包括1)的個數,記作φ(n) 。
φ(1)=1。(唯一和1互質的數就是1本身)。
對於質數p,φ(p) = p - 1。(除去它本身)
尤拉定理:對於互質的正整數a和n,有a^φ(n) ≡ 1 mod n。
尤拉函式是積性函式:若m,n互質,φ(mn)=φ(m)φ(n)(積性函式表示式)。
那麼思考,n是質數p的k次冪,有φ(n)=p^k-p^(k-1)=(p-1)p^(k-1),因為除了p的倍數外,其他數都跟n互質。
尤拉函式的性質:
設p為n的質因數,
若(n % p == 0 && (n / p) % p == 0) 則有φ(n)=φ(n / p) * p;
若(n % p == 0 && (p / p) % p != 0) 則有:φ(n) = φ(n / p) * (p - 1)。
求尤拉函式:
法一:
long long euler(long long x) //直接求尤拉函式 //還有一種線性篩法}}
if(x>1) res*=(x-1);
return res;
}
法二:
//求尤拉函式 相當於不斷減去
long long phi(long long x)
}if(x>1)
res=res-res/x;
return res;
}
本題只需套公式,先求出c的尤拉函式,大數b不斷讀入不斷模,(高位的能模的最後的數也能模掉這樣子),得出新的次方數b,再進行對a^newb mod c進行快速冪即可。
注:本題需用%i64d。
**:
#include #include #define ll long long
const int maxc=1e6+20;
long long a,c,phic,numb;
char b[maxc];
long long euler(long long x) //直接求尤拉函式 //還有一種線性篩法}}
if(x>1) res*=(x-1);
return res;
}long long qpow(long long a,long long n,long long mod) //快速冪
a=(a*a)%mod;
n>>=1; //一定不要再忘記=了orz
}return ans;
}int main()
return 0;
}
尤拉函式,擴充套件尤拉降冪
尤拉函式 phi n 表示下於n且與n互質的整數的個數。模板 include include include define il inline define maxn 200100 include define ll long long using namespace std 這個函式是求1 n內小...
尤拉函式與尤拉降冪
尤拉函式 對於正整數 n 尤拉函式是小於或等於 n 的正整數中與 n 互質的數的數目。varphi 1 1 除了1之外,所有正整數與它本身都不互質 對於質數 p varphi p p 1 sum varphi d n 其中 d 是 n 的因數 尤拉函式是積性函式,若 m,n 互質,則有 varphi...
fzu 1752(尤拉降冪模板題!)
given a,b,c,you should quickly calculate the result of a b mod c.1 a,c 1000000000,1 b 10 1000000 input there are multiply testcases.each testcase,ther...