zoukankan      html  css  js  c++  java
  • 2018中国大学生程序设计竞赛

    http://acm.hdu.edu.cn/showproblem.php?pid=6440

    题意:让你重新定义任意一对数的乘法和加法结果(输出乘法口诀表和加法口诀表),使得m^p+n^p==(m+n)^p(p为质数),并且存在一个0<q<p使得 q^k(0<k<p)取遍1~p-1的所有值,并且该运算是封闭的(exists an integer q(0<q<p) to make the set {qk|0<k<p,kZ} equal to {k|0<k<p,kZ}.)

    题解:不难看出,出题人想要你把加法重定义成乘法,这样明显满足m^p+n^p==(m+n)^p,并且modp以后能取遍1~p-1的所有值。并且能卡掉全部输出零的流氓方法。

    这里给出另一种流氓做法,

    先考虑如何使得 q^k取遍1~p-1的所有值,

    因为q^5==1*q*q*q*q*q,

    定义

    1*q=2 

    2*q=3

    3*q=4

    4*q=1

    于是q^5次方为2.

    在乘法表中就是竖着填2341。

    我们把每一列都这么填,

    此时对任意x有x^p==2,我们只需将m^p+n^p定义成二即可。

    怎么做呢? 把加法表填满2就行。

    ac代码:

    #include<iostream>
    #include<cstdio>
    using namespace std;
    int n, N;
    #define rep(i,t,n)  for(int i =(t);i<=(n);++i)
    #define per(i,n,t)  for(int i =(n);i>=(t);--i)
    int main() {
        int t;
        cin >> t;
        while (t--)
        {
            int n;
            cin >> n;
            if (n == 2) {printf("0 1
    1 0
    0 0
    0 1");}
            else {
                rep(i, 1, n) { rep(j, 1, n) cout << 2 << ' '; cout << endl; }
                rep(i, 1, n)printf("0 "); printf("
    ");
                rep(i, 2, n - 1) {rep(j, 1, n) printf("%d ", i ); printf("
    ");}
                rep(i, 1, n)printf("1 "); printf("
    ");
            }
    
        }
        return 0;
    }

      

    成功的路并不拥挤,因为大部分人都在颓(笑)
  • 相关阅读:
    5 Python3 函数进阶&迭代器与生成器
    2 python第三章文件操作
    4 python内置函数
    python内置函数 eval()、exec()以及complie()函数
    0 字符与字节的区别
    python enumerate() 函数
    1 python 文件处理
    python 之编写登陆接口
    python 之九九乘法表
    第一模块第二章-数据类型整理
  • 原文地址:https://www.cnblogs.com/SuuT/p/9534892.html
Copyright © 2011-2022 走看看