[2018CCPC网络赛]HDU_6440 Dream(费马小定理)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=6440

题意:

对于 0 &lt; = i , j &lt; p 0 &lt;= i , j &lt; p 0<=i,j<p定义一种加法与乘法的运算,使得下式对于任意 0 &lt; = a , b &lt; p 0&lt;=a,b&lt;p 0<=a,b<p都成立,其中 p p p是为素数
( a + b ) n = a n + b n (a + b) ^ n = a^n + b ^ n (a+b)n=an+bn
题目要求输出每一个 i + j i + j i+j i ∗ j i * j ij的结果

题目分析:

对于这个题目,我们看到题目给我们的条件中给出, p p p为素数,还有 p p p次方,我们尝试用,费马小定理去解决这道题目: a p − 1 ≡ 1 ( m o d p ) a ^ p - 1\equiv 1{\pmod p} ap11(modp)
因为 a &lt; p a &lt; p a<p,我们在等式两边同时乘上 a a a可以得到 a p ≡ a ( m o d p ) a ^ p\equiv a{\pmod p} apa(modp),
因为 ( a + b ) ( m o d p ) = a ( m o d p ) + b ( m o d p ) , ( a ∗ b ) ( m o d p ) = a ( m o d p ) ∗ b ( m o d p ) (a + b){\pmod p} = {a\pmod p} + {b\pmod p},(a * b){\pmod p} ={a\pmod p} * {b\pmod p} (a+b)(modp)=a(modp)+b(modp),(ab)(modp)=a(modp)b(modp),因此我们在每次加法与乘法运算的时候都对 p p p取模,利用这种运算我们得到等式左边等于 a + b a + b a+b,等式右边也等于 a + b a + b a+b,构造完成

#include <cstdio>

int main()
{
    int T;
    scanf("%d",&T);
    while(T--)
    {
        int n;
        scanf("%d",&n);
        for(int i = 0;i < n;i++)
            for(int j = 0;j < n;j++)
                printf("%d%c",(i + j) % n,j == n - 1 ? '\n' : ' ');
        for(int i = 0;i < n;i++)
            for(int j = 0;j < n;j++)
                printf("%d%c",(i * j) % n,j == n - 1 ? '\n' : ' ');
    }
    return 0;

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值