hdu 6440 Dream(费马小定理+构造)
![](https://images2018.cnblogs.com/blog/1336165/201809/1336165-20180910092344030-2063652827.png)
![](https://images2018.cnblogs.com/blog/1336165/201809/1336165-20180910092400077-1003887514.png)
解题思路:给定素数p,定义p内封闭的加法和乘法运算(运算封闭的定义:若从某个非空数集中任选两个元素(同一元素可重复选出),选出的这两个元素通过某种(或几种)运算后的得数仍是该数集中的元素,那么,就说该集合对于这种(或几种)运算是封闭的。),使得等式$(m+n)^p = m^p + n^p(0 \leq m,n<p) $恒成立。
由费马小定理可得$(m+n)^p\equiv(m+n)(mod\;p)$,则$m^p + n^p \equiv(m+n)(mod\;p)$。
∴在模p的意义下,$ (m+n)^p = m^p + n^p(0 \leq m,n<p)$恒成立,且加法运算与乘法运算封闭。
因为在p是素数的情况下,对任意的整数x都有$x^p\equiv x(mod\;p)$,即有$ m^p\equiv m(mod\;p),n^p\equiv n(mod\;p)$,所以乘法运算满足$m^p \cdot n^p \equiv m\cdot n(mod\;p)$。
AC代码:
1 #include<bits/stdc++.h> 2 using namespace std; 3 int t,p; 4 int main(){ 5 while(cin>>t){ 6 while(t--){ 7 cin>>p; 8 for(int i=0;i<p;++i) 9 for(int j=0;j<p;++j) 10 printf("%d%c",(i+j)%p,j==p-1?'\n':' '); 11 for(int i=0;i<p;++i) 12 for(int j=0;j<p;++j) 13 printf("%d%c",i*j%p,j==p-1?'\n':' '); 14 } 15 } 16 return 0; 17 }