https://vjudge.net/problem/HDU-6440
题目大意:给你一个式子 ,让你构造一个p*p的乘法表和加法表,使得所有的在(0,p-1)内的m,n都满足这个式子。题目给定的p是素数。
Sample Input
1
2
Sample Output
0 1
1 0
0 0
0 1
分析:因为给定的p是素数,根据费马小定理得
因此,当m+n不等于p时,有 同时,
;
当m+n等于p时,有;而
依然成立,它的值也是0.
所以在模p意义下, (0≤m,n<p) 恒成立,且加法运算与乘法运算封闭。
代码:(引起来的部分为验证)
#include<cstdio>
using namespace std;
const int maxn =1e5+5;
// int a[1000][1000], b[1000][1000];
int main()
{
int p;
int T; scanf("%d",&T);
while(T--){
scanf("%d",&p);
for(int i=0;i<p;++i){
for(int j=0;j<p;++j){
// a[i][j]=(i+j)%p;
printf("%d%c",(i+j)%p,j==p-1?'\n':' ');
}
}
for(int i=0;i<p;++i){
for(int j=0;j<p;++j){
// b[i][j]=(i*j)%p;
printf("%d%c",(i*j)%p,j==p-1?'\n':' ');
}
}
/* int ans=1, sum=1, sum2=1;
bool flag=0;
for (int i = 0; i < p; i++)
for (int j = 0; j < p; j++)
{
ans=1, sum=i, sum2=j;
for (int k = 0; k < p; k++)
{
ans *= a[i][j];
ans %= p;
}
for (int k = 1; k < p; k++)
{
sum = b[sum][i];
}
for (int k = 1; k < p; k++)
{
sum2 = b[sum2][j];
}
sum = a[sum][sum2];
if (ans != sum)
{
printf("%d %d %d %d\n",i, j, ans, sum );
flag=1;
}
}
printf("%d\n",flag );*/
}
return 0;
}