梦开始的地方(Dream)

1 篇文章 0 订阅

梦开始的地方(Dream)

英文题面:

题目出处:Vjudge
Freshmen frequently make an error in computing the power of a sum of real numbers, which usually origins from an incorrect equation ( m + n ) p = m p + n p (m+n)^p = m ^p + n ^ p (m+n)p=mp+np
, where m, n, pm,n,p are real numbers. Let’s call it ``Beginner’s Dream’'.

For instance, ( 1 + 4 ) 2 = 5 2 = 25 (1+4)^2 = 5^2 = 25 (1+4)2=52=25 but 1 2 + 4 2 = 17 ≠ 25 1^2 + 4 ^2 = 17 \ne 25 12+42=17=25
Moreover, 9 + 16 = 25 = 5 \sqrt{9+16}=\sqrt{25}=5 9+16 =25 =5 which does not equal 3 + 4 = 7 3+4=7 3+4=7.
Fortunately, in some cases when pp is a prime, the identity
( m + n ) p = m p + n p (m+n)^p = m^p + n^p (m+n)p=mp+np
holds true for every pair of non-negative integers m, nm,n which are less than pp, with appropriate definitions of addition and multiplication.

You are required to redefine the rules of addition and multiplication so as to make the beginner’s dream realized.

Specifically, you need to create your custom addition and multiplication, so that when making calculation with your rules the equation ( m + n ) p = m p + n p (m+n)^p=m^p+n^p (m+n)p=mp+np is a valid identity for all non-negative integers m,nm,n less than pp. Power is defined as
a p = { 1 , p = 0 a p − 1 ⋅ a , p > 0 a^p = \left\{ \begin{array}{ll} 1, & p = 0 \\ a^{p-1} \cdot a, & p > 0 \end{array} \right. ap={1,ap1a,p=0p>0

Obviously there exists an extremely simple solution that makes all operation just produce zero. So an extra constraint should be satisfied that there exists an integer q:(0 < q < p)q(0<q<p) to make the set { q k   ∣   0 < k < p , k ∈ Z } q k ∣ 0 < k < p , k ∈ Z e q u a l   t o { k   ∣   0 < k < p , k ∈ Z } k ∣ 0 < k < p , k ∈ Z . \{ q^k \,|\, 0 < k < p, k \in \mathbb{Z} \}{q^k ∣0<k<p,k∈Z} equal \ to \{k\,|\,0<k<p,k \in \mathbb{Z}\}{k∣0<k<p,k∈Z}. {qk0<k<p,kZ}qk0<k<p,kZequal to{k0<k<p,kZ}k0<k<p,kZ. What’s more, the set of non-negative integers less than pp ought to be closed under the operation of your definitions.

描述

祥祥经常在计算实数和的幂时犯错误,这通常源于一个错误的等式 ( m + n ) p = m p + n p (m+n)^p=m^p+n^p (m+n)p=mp+np,其中 m , n , p m,n,p m,n,p 是实数。我们把它称为“祥祥的梦想”。

例如 ( 1 + 4 ) 2 = 5 2 = 25 ≠ 1 2 + 4 2 (1+4)^2 = 5^2=25\neq 1^2 + 4^2 (1+4)2=52=25=12+42 ,又如 9 + 16 = 25 = 5 ≠ 3 + 4 \sqrt{9 + 16} = \sqrt{25} = 5 \neq 3 + 4 9+16 =25 =5=3+4 .

幸运的是,在一些情况下,当 p p p 是质数的时候,如果重新定义加法、乘法,等式 ( m + n ) p = m p + n p (m+n)^p=m^p+n^p (m+n)p=mp+np 对于任何小于 p p p 的非负整数 m , n m,n m,n 都成立。

你需要重新定义加法和乘法,来实现祥祥的梦想。

更具体的说,你需要重新定义加法和乘法来使得等式 ( m + n ) p = m p + n p (m+n)^p=m^p+n^p (m+n)p=mp+np 对于任何小于 p p p 的非负整数 m , n m,n m,n 都成立。下面是幂的定义:
a p = { 1 , p = 0 a p − 1 ⋅ a , p > 0 a^p = \left\{ \begin{array}{ll} 1, & p = 0 \\ a^{p-1} \cdot a, & p > 0 \end{array} \right. ap={1,ap1a,p=0p>0

显然,这里存在一个非常极端的解,就是让所有的运算结果都是 0 0 0 ,为了避免这种情况,你需要让你的解满足:存在一个正整数$ q (0 < q < p)$ 使得集合 { q k ∣ 0 < k < p , k ∈ Z } \{q^k|0<k<p, k\in \mathbb{Z}\} {qk∣0<k<p,kZ} 和集合 { k ∣ 0 < k < p , k ∈ Z } \{k|0<k<p, k\in \mathbb{Z}\} {k∣0<k<p,kZ} 相等。

注意,你定义的运算需要让小于 p p p 的非负整数集对其封闭。

输入描述

输入占一行,是一个正质数 p p p ,意义见上述内容。

输出描述

输出占 2 p 2p 2p 行,每行是 p p p 个整数。

i i i 行( 1 ≤ i ≤ p 1\leq i\leq p 1ip)的第 j j j 个( 1 ≤ j ≤ p 1\leq j\leq p 1jp)整数表示 ( i − 1 ) + ( j − 1 ) (i-1)+(j-1) (i1)+(j1) 的值。第 ( p + i ) (p+i) (p+i) 行( 1 ≤ i ≤ p 1\leq i\leq p 1ip)的第 j j j 个( 1 ≤ j ≤ p 1\leq j\leq p 1jp)整数表示 ( i − 1 ) ⋅ ( j − 1 ) (i-1)\cdot(j-1) (i1)(j1) 的值。

提示

0 < p < 2 10 0 < p < 2^{10} 0<p<210

样例

样例输入

2

样例输出

0 1
1 0
0 0
0 1

题解代码

  1. 题目的所有条件都满足模p剩余域(即模P剩余系)的条件
    证明:
    首先,题目中的 ( m + n ) p = m p + n p ( p ∈ 素数 ) (m + n)^p = m^p + n^p(p \in 素数) (m+n)p=mp+np(p素数),要满足一个条件,即:
    ( m + n ) p ≡ m p + n p ( m o d p ) (m + n) ^p \equiv m^p + n^p \pmod{p} (m+n)pmp+np(modp)
    将二项式展开,得到:
    ( m + n ) p = ∑ i = 0 p ( p i ) m n − i n i ≡ m p + n p ( m o d p ) (m + n) ^p = \sum_{i = 0}^{p} \dbinom{p}{i} m^{n - i}n^i \equiv m^p + n^p \pmod{p} (m+n)p=i=0p(ip)mninimp+np(modp)
    同时,在模P剩余系 ( p ∈ 素数 ) (p \in 素数) (p素数)中, ( p k ) ≡ 0 ( m o d p ) \dbinom{p}{k} \equiv 0 \pmod{p} (kp)0(modp)
    简单的证明一下:
    首先: ( p k ) = p ! k ! ( p − k ) ! \dbinom{p}{k} = \frac{p!}{k!(p-k)!} (kp)=k!(pk)!p!
    ∴ 原式 = ∏ i = p p − k + 1 i k ! \therefore 原式 = \frac{\prod_{i = p}^{p - k + 1} i}{k!} 原式=k!i=ppk+1i
    ∵ k ∈ 模 p 剩余系 \because k \in 模p剩余系 kp剩余系
    k 模 p 的逆元也 ∈ 模 p 剩余系 k模p 的逆元也 \in 模p剩余系 kp的逆元也p剩余系
    注:逆元
    ∴ ∏ i = p p − k + 1 i k ! = ∏ i = p p − k + 1 i × ∏ i = k 1 k 模 p 的逆元 ≡ 0 ( m o d p ) \therefore \frac{\prod_{i = p}^{p - k + 1} i}{k!} = \prod_{i = p}^{p - k + 1} i \times \prod_{i = k}^{1}k模p的逆元 \equiv 0 \pmod{p} k!i=ppk+1i=i=ppk+1i×i=k1kp的逆元0(modp)
    证毕。
    所以,一切只要按模P剩余系的加乘来就好了(即正常 R R R内的加乘)。
    代码:
#include <bits/stdc++.h>
using namespace std;
const int N = 5e5 + 5;
const int M = 1005;
typedef long long ll;
signed main(){
    int p;
    scanf("%d",&p);
    for(int i = 1 ; i <= p ; i ++) {
        for (int j = 1 ; j <= p ; j ++) {
            printf("%d " , ((i - 1) + (j - 1)) % p) % p;
        }
        printf("\n");
    }
    for (int i = 1 ; i <= p ; i ++) {
        for (int j = 1 ; j <= p ; j ++) {
            printf("%d " , ((i - 1) % p * (j - 1) % p) %p);
        }
        printf("\n");
    }
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值