zoukankan      html  css  js  c++  java
  • HDU6440 Dream

    题目链接:https://vjudge.net/problem/HDU-6440

    知识点:  构造、费马小定理

    题目大意:

      给定一个素数 $p$,要求定义一个加法运算表和一个乘法运算表,尺寸都为 $p imes p$,加法运算表上第 $i$ 行第 $j$ 列的元素代表 $(i-1)+(j-1)$ 的值,乘法运算表上第 $i$ 行第 $j$ 列的元素代表 $(i-1) imes (j-1)$ 的值。要求满足两个条件:

      一、对于任意 $0 le n,m < p$,$(n+m)^p = n^p + m^p$;

      二、存在一个 $q(0<q<p)$,使得 ${q^{k}|0<k<p, k in Z} = {k|0<k<p, k in Z}$.

    解题思路一:

      加法运算表全部置为 $2$;

      乘法运算表上,首先第一行和第一列都置为 $0$,对于其他部分,第二行全置 $2$,第三行全置 $3$,依次类推直到倒数第二行,最后一行全置 $1$.

    代码一:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main(){
     5     int t;
     6     scanf("%d",&t);
     7     while(t--){
     8         int p;
     9         scanf("%d",&p);
    10         for(int i=0;i<p;i++){
    11             printf("2");
    12             for(int j=1;j<p;j++)
    13                 printf(" 2");
    14             puts("");
    15         }
    16 
    17         printf("0");
    18         for(int i=1;i<p;i++)    printf(" 0");
    19         puts("");
    20 
    21         for(int i=2;i<p;i++){
    22             printf("0");
    23             for(int j=1;j<p;j++)
    24                 printf(" %d",i);
    25             puts("");
    26         }
    27 
    28         printf("0");
    29         for(int i=1;i<p;i++)    printf(" 1");
    30         puts("");
    31     }
    32     
    33     return 0;
    34 }
    View Code

    解题思路二:

      由费马小定理可知 $(n+m)^p equiv (n+m) equiv n^{p} + m ^{p} (mod p)$,故只需将加法运算表和乘法运算表都定义为在模 $p$ 意义下的运算表即可。

    代码二:

     1 #include <bits/stdc++.h>
     2 using namespace std;
     3 
     4 int main(){
     5     int t;
     6     scanf("%d",&t);
     7     while(t--){
     8         int p;
     9         scanf("%d",&p);
    10         for(int i=0;i<p;i++){
    11             printf("%d",i);
    12             for(int j=1;j<p;j++)
    13                 printf(" %d",(i+j)%p);
    14             puts("");
    15         }
    16 
    17         for(int i=0;i<p;i++){
    18             printf("0");
    19             for(int j=1;j<p;j++)
    20                 printf(" %d",i*j%p);
    21             puts("");
    22         }
    23     }
    24 
    25     return 0;
    26 }
    View Code
    “这些年我一直提醒自己一件事情,千万不要自己感动自己。大部分人看似的努力,不过是愚蠢导致的。什么熬夜看书到天亮,连续几天只睡几小时,多久没放假了,如果这些东西也值得夸耀,那么富士康流水线上任何一个人都比你努力多了。人难免天生有自怜的情绪,唯有时刻保持清醒,才能看清真正的价值在哪里。”
  • 相关阅读:
    Lucene的分页查询
    Lucene索引库的简单优化
    Lucene的排序搜索
    Axure RP 6.5学习记录(1)界面介绍
    Lucene的高亮器Highlighter
    关于Lucene以及索引和搜索的流程
    Lucene初体验
    linux 下 ansi_x3.41968 java 邮件附件乱码
    SQL Server DBA工作内容详解
    SQL Server 导出 insert into 脚本
  • 原文地址:https://www.cnblogs.com/Blogggggg/p/9544543.html
Copyright © 2011-2022 走看看