精华内容
下载资源
问答
  • 函数”一词的来历

    千次阅读 2017-05-25 18:21:10
    如何给学生讲清楚函数的意义,就象孙维刚老师给学生讲解“有理数”那样彻底的话,学生就不再为函数而发愁,现将函数有关来历修如下: “函数”一词最初是由德国的数学家莱布尼茨在17世纪首先采用的,当时莱布尼茨...
    注:中学里有一次函数、反比例函数、二次函数等,“函数”一词因为其与学生的实际知识与体验相去甚远,而使学生感到极其抽象,理解困难,感到学习函数相当难。如何给学生讲清楚函数的意义,就象孙维刚老师给学生讲解“有理数”那样彻底的话,学生就不再为函数而发愁,现将函数有关来历修解如下:
      “函数”一词最初是由德国的数学家莱布尼茨在17世纪首先采用的,当时莱布尼茨用“函数”这一词来表示变量x的幂,即x2,x3,….接下来莱布尼茨又将“函数”这一词用来表示曲线上的横坐标、纵坐标、切线的长度、垂线的长度等等所有与曲线上的点有关的变量.就这样“函数”这词逐渐盛行.
      这种解释我并不赞同,当初莱布尼茨决不是用“函数”这两个字来表示的。函数肯定是中国人说的。莱懂汉语吗,他就用“函数”了?这种解释等于没有解释。
      在中国,古时候的人将“函”字与“含”字通用,都有着“包含”的意思,清代数学家、天文学家、翻译家和教育家,近代科学的先驱者李善兰给出的定义是:“凡式中含天,为天之函数.”中国的古代人还用“天、地、人、物”4个字来表示4个不同的未知数或变量,显然,在李善兰的这个定义中的含义就是“凡是公式中含有变量x,则该式子叫做x的函数.”这样,在中国“函数”是指公式里含有变量的意思.这样解释还算不错。   瑞士数学家雅克·柏努利给出了和莱布尼茨相同的函数定义.
      1718年,雅克·柏努利的弟弟约翰·柏努利给出了函数如下的定义:由任一变数和常数的任意形式所构成的量叫做这一变数的函数.换句话说,由x和常量所构成的任一式子都可称之为关于x的函数.   1775年,欧拉把函数定义为:“如果某些变量:以某一种方式依赖于另一些变量.即当后面这些变量变化时,前面这些变量也随着变化,我们把前面的变量称为后面变量的函数.”由此可以看到,由莱布尼兹到欧拉所引入的函数概念,都还是和解析表达式、曲线表达式等概念纠缠在一起.   首屈一指的法国数学家柯西引入了新的函数定义:“在某些变数间存在着一定的关系,当已经给定其中某一变数的值,其它变数的值也可随之而确定时,则将最初的变数称之为‘自变数’,其它各变数则称为‘函数’”.在柯西的定义中,首先出现了“自变量”一词.   1834年,俄国数学家罗巴契夫斯基进一步提出函数的定义:“x的函数是这样的一个数,它对于每一个x都有确定的值,并且随着x一起变化.函数值可以由解析式给出,也可以由一个条件给出,这个条件提供了一种寻求全部对应值的方法.函数的这种依赖关系可以存在,但仍然是未知的”.这个定义指出了对应关系。即条件的必要性,利用这个关系以求出每一个x的对应值.    1837年德国数学家狄里克雷认为怎样去建立x与y之间的对应关系是无关紧要的,所以他的定义是:“如果对于x的每一个值,y总有一个完全确定的值与之对应,则y是x的函数.”   德国数学家黎曼引入了函数的新定义:“对于x的每一个值,y总有完全确定了的值与之对应,而不拘建立x,y之间的对应方法如何,均将y称为x的函数.”   上面函数概念的演变,我们可以知道,函数的定义必须抓住函数的本质属性,变量y称为x的函数,只须有一个法则存在,使得这个函数取值范围中的每一个值,有一个确定的y值和它对应就行了,不管这个法则是公式或图象或表格或其他形式.   由此,就有了我们课本上的函数的定义:一般地,在一个变化过程中,如果有两个变量x与y,并且对于x的每一个确定的值,y都有惟一确定的值与其对应,那么我们就说x是自变量,y是x的函数.
      不满意。以上这些只是对函数概念的演化作归纳,而非对“函数”本身进行解释。没有多大意义。有待进一步寻找解释得清楚的内容。

    又有说:

    “函数”这个词在我国是由清代数学家李善兰于1859年(咸丰九年)翻译《代数积拾级》一书时最先使用的,他将,tf unction”一词译成“函数”,并给出定义,a凡此变数中函彼变数,则此为彼之函数。如直线之式为地二甲天1乙(1)则地为天之函数。”这里“函”是包含的意思。如用戈与y代未知数“天”与“地”,用A与B代常数 “甲”与“乙”,(1)式可写成. y‘过戈+B.在这个式子里,变量y包含着变量x,那么y就是x的函数。在国外,最早使用“函数”(拉丁文fu n ctio,作,功用之意)一词,要推微积分的创始人之一的德国大数学家菜布尼兹(Leibniz)。他在1673年的一篇手稿里用“functio”来表示任何一个随着曲线上的点的变动而变动的量。而牛顿(Newton)在微积分中一直使用“流量”(fluent)一词来表示变量间的关系。正式采用符号f(二)表示函数的则是伟大的数学家欧拉(E以er)开始的。顺便指出,函数概念业非出自几位数学家的空想,而是源于那个时代对天文和航海等运动问题的研究。17世纪早期,在伽里略(Galile’o)否定了地球中心说,给太阳中......

    现行数学教科书上使用的“函数”一词是转译词.是我国清代数学家李善兰在翻译《代数学》(1895年)一书时,把“function”译成函数的.

    中国古代“函”字与“含”字通用,都有着“包含”的意思,李善兰给出的定义是:“凡式中含天,为天之函数.”中国古代用天、地、人、物4个字来表示4个不同的未知数或变量.这个定义的含义是:“凡是公式中含有变量,则该式子叫做 的函数.”所以“函数”是指公式里含有变量的意思.

    你知道“函数”是怎样发展来的吗?让我们一起回顾一下函数概念的发展史吧,这对于刚接触到函数的初中同学来说,虽然不可能有较深理解,但无疑对加深理解课堂知识、激发学习兴趣将是大有益处的.

    函数(function)这一名词,是德国的数学家莱布尼茨(Liebniz 1646—1716)17世纪首先采用的.在最初,莱布尼茨用函数一词表示变量 的幂,即 ,,….其后莱布尼茨还用函数一词表示曲线上的横坐标、纵坐标、切线的长度、垂线的长度等所有与曲线上的点有关的量.

    与莱布尼茨几乎同时,瑞士数学家雅克·柏努意(Jacques Bernoulli 1645—1705)给出了和莱布尼茨相同的函数定义.1718年,雅克·柏努意的弟弟约翰·柏努意(Jean Bernoulli1667—1748)给出了函数的如下定义:由任一变数和常数的任意形式所构成的量叫做这一变数的函数.换句话说定义为:由和常量所构成的任一式子都可称之为关于 的函数.

    约翰·柏努意的学生瑞士数学家欧拉(Euler 1707—1783),把约翰·柏努意关于函数的定义又推进了一步,使之更加明朗化.1775年,欧拉把函数定义为:“如果某些变量:以某一种方式依赖于另一些变量.即当后面这些变量变化时,前面这些变量也随着变化,我们把前面的变量称为后面变量的函数.”

    由此可以看到,由莱布尼兹到欧拉所引入的函数概念,都还是和解析表达式、曲线表达式等概念纠缠在一起.

    为了适应当时所出现的各种情况,为了适应数学的发展,法国数学家柯西(Cauchy 1789—1857)引入了新的函数定义:“在某些变数间存在着一定的关系,当一经给定其中某一变数的值,其它变数的值也可随之而确定时,则将最初的变数称之为‘自变数’,其它各变数则称为‘函数’.”在柯西的定义中,首先出现了“自变量”一词.

    人们不难看出,这一定义和中学课本的定义是很相近的.在这里,函数的概念和曲线、连续、不连续等概念之间的纠缠不清的情况,已经得到了澄清.

    但是,柯西的定义总还是考虑到 , 之间的关系可用解析式表示.德国数学家黎曼(Riemann 1826—1866)引入了新的定义:“对于 的每一个值, 总有完全确定了的值与之对应,而不拘建立 , 之间的对应方法如何,均将 称为的函数.”

    1834年,俄国数学家罗巴契夫斯基进一步提出函数的定义:“ 的函数是这样的一个数,它对于每一个 都有确定的值 ,并且随着一起变化.函数值可以由解析式给出,也可以由一个条件给出,这个条件提供了一种寻求全部对应值的方法.函数的这种依赖关系可以存在,但仍然是未知的”,这个定义指出了对应关系(条件)的必要性,利用这个关系以求出每一个的对应值.

    1837年德国数学家狄里克雷认为怎样去建立 与 之间的对应关系是无关紧要的,所以他的定义是:“如果对于 的每一个值,总有一个完全确定的值与之对应,则 是 的函数.”这个定义抓住了概念的本质属性,变量 称为的函数,只须有一个法则存在,使得这个函数取值范围中的每一个值,有一个确定的值和它对应就行了,不管这个法则是公式或图象或表格或其他形式.这个定义比前面的定义带有普偏性,为理论研究和实际应用提供了方便.因此,这个定义曾被比较长期的使用着.

    上面我们对函数概念的历史发展作了概述,我们看到,“函数”这个重要概念发展到近代,经过了一段如此漫长的道路,从某种意义上来说,它反映了人类对事物逐渐精确化的认识过程.数学史表明,重要的数学概念的产生和发展,对数学发展起着不可估量的作用.


    补充:函数与方程的区别

    变量之间的函数关系是严格的对应关系,如果x是自变量,因变量y与x必须一一对应,即每一个x,在定义域D内,都只能对应一个y,不能对应多个。但是反过来,每一个因变量y,可以对应多个x,这样的函数就没有反函数。只有x与y都严格一一对应的情况,x与y才能互反。

    注:个人理解所谓“函数”是一个数,即 有内涵,涵义的数,这个数的涵义由一种对应关系指定,例如y=x+1,y是x的函数,x+1是这个函数y的关系(涵义),这个关系描述了函数与变量之间的联系。假设我拿着一支钢笔告诉你,这不是一支普通的钢笔,因为是我爷爷留给我的,那么这支钢笔就有了它的内涵。类似地,我告诉你y不是一个普通的变量,是一个函数,因为它是由x+1得到的,那么y内涵就是x+1。

    方程描述是几个变量之间的关系,这样的关系可以是函数关系,也可以不是函数关系,比如二维坐标系中的圆的方程式:x2+y2=R2x2+y2=R2,在这个方程式中,x和y之间都是一对多的关系。但是如果设定x或y的取值范围,这个方程对应的也可以是一个函数关系。

    课本上都显函数和隐函数的概念,显函数就是可以将关系式写成y=f(x)这样形式的函数,这样的函数都是初等函数(含幂指函数);隐函数有些可以通过形式变换,也变换成显函数,有些则不行。一般由方程确定的隐函数,并不能转换成显函数的形式,这时我们称这样的函数为非初等函数

    函数解析表达式一般讲y写在等号左边,x写在等号右边,自变量和因变量分开(除了隐函数可能无法这样写出);方程一般协成F(x,y)=0这样的形式。方程也是一种函数,我们所谓的对隐函数求导的方法,就是在某个方程上直接事情,是有效的,并不因为方程有可能不是严格的函数而发成错误。

    以上是我个人理解的函数与方程之间的区别。函数与方程显然也存在很多联系,隐函数看起来就很想一个方程式,而如果限制方程式变量的取值范围,也能得到函数式的对应关系。


    展开全文
  • 1e6),如何求出phi(x)=k的呢 容易知道k为奇数时唯有k=1有x=1,其余无 假设n有素因子分解$n={p_1}^{a_1}{p_2}^{a_2}\cdots{p_k}^{a_k}$ 因为$\phi(x)=\prod\limits_{j=1}^{k}{p_j}^{a_j-1}(p_j-1)$ ...

    给定一个数x,我们可以求出phi(x)

    那给定一个数k(k<1e6),如何求出phi(x)=k的解呢

    容易知道k为奇数时唯有k=1有解x=1,其余无解

     

    假设n有素幂因子分解$n={p_1}^{a_1}{p_2}^{a_2}\cdots{p_k}^{a_k}$

    因为$\phi(x)=\prod\limits_{j=1}^{k}{p_j}^{a_j-1}(p_j-1)$

    所以$1<p_j<=k$且$(p_j-1)\mid k$

    由此筛选出一些质数,同时记录它的最高幂次

    然后用dfs遍历所有的情况,找到答案就将答案加入ans

     

    以k=8为例,设$x=2^a3^b5^c$

    对于2,有$(2-1)2^{a-1}\mid 8$,则a最大为4

    对于3,有$(3-1)3^{b-1}\mid 8$,则b最大为1

    对于5,有$(5-1)5^{c-1}\mid 8$,则c最大为1

    再进行bfs搜索,得到可行解

    a b c x
    0 1 1 15
    4 0 0 16
    2 0 1 20
    3 1 0 24
    1 1 1 30

     

     

    发现某些偶数是无解的,随着x的增大,phi(x)似乎越来越稀疏

     

    代码

    #include <vector>
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    using namespace std;
    typedef long long LL;
    const int N=500000+5;
    bool prime[N];
    int p[N], tot=0;
    //线筛
    void initP(){
        for(int i=2;i<N;i++)prime[i]=true;
        for(int i=2;i<N;i++){
            if(prime[i])p[tot++]=i;
            for(int j=0;j<tot&&i*p[j]<N;j++){
                prime[i*p[j]]=false;
                if(i%p[j]==0)break;
            }
        }
    }
    //快速幂
    LL qpow(LL a,LL b){
        LL ret=1;
        while(b){
            if(b&1)ret=(ret*a);
            a=(a*a);
            b>>=1;
        }
        return ret;
    }
    typedef pair<LL,LL> pr;
    vector<LL> ans;
    vector<pr>v;
    int num[100];//保存状态
    void add(){
        LL ret=1;
        for(int i=0;i<v.size();i++){
            if(num[i])ret*=qpow(v[i].first,num[i]);
        }
        ans.push_back(ret);
    }
    //now代表当前状态的欧拉函数值
    void dfs(int cur,LL now,LL n){
        if(now==n&&cur==v.size())add();//找到答案
        if(now>n||cur==v.size())return;//剪枝与边界
        dfs(cur+1,now,n);       //cur位置上的数为0
        now*=v[cur].first-1;
        num[cur]=1;
        dfs(cur+1,now,n);       //cur位置上的数为1
        for(int i=1;i<v[cur].second;i++){
            now*=v[cur].first;
            num[cur]++;
            dfs(cur+1,now,n);   //cur位置上的数>1
        }
        num[cur]=0;               //回溯
    }
    bool isPrime(LL n){
        if(n<N)return prime[n];
        for(int i=0;i<tot;i++){
            if(n%p[i]==0)return false;
        }
        return true;
    }
    void solve(LL n){
        v.clear();
        ans.clear();
        memset(num,0,sizeof num);
        LL m,tmp,last=n;
        //分解质因数
        for(int i=0;i<tot&&p[i]<n;i++){
            if(n%(p[i]-1)==0){
                m=1;
                tmp=n/(p[i]-1);
                while(tmp%p[i]==0)m++,tmp/=p[i];
                //printf("%d - %d\n",p[i],m);
                v.push_back(pr(p[i],m));
            }
        }
        if(isPrime(n+1))v.push_back(pr(n+1,1));
        dfs(0,1,n);
        sort(ans.begin(),ans.end());   //排序
    }
    int main(){
        initP();
        LL n;
        while(~scanf("%lld",&n)){
            solve(n);
            if(ans.size()==0||ans[0]>(1LL<<31))printf("-1\n");
            else printf("%lld\n",ans[0]);
        }
        return 0;
    }
    

      

      

      

      

    转载于:https://www.cnblogs.com/shuiming/p/7726651.html

    展开全文
  • 傅里叶级数(一)

    千次阅读 2016-12-18 21:42:00
    学过高数的应该都知道,对于非齐次微分方程的求解,如果输入是指数,sin或者cos系列,就可以先求其其次微分方程的通,然后通过公式求出特。如果是其他的函数,就很难解决。傅里叶级数就是将所有的周期函数转化...

    概述:傅里叶级数,起初是用来解决如何求解微分方程的问题的。学过高数的应该都知道,对于非齐次微分方程的求解,如果输入是指数幂,sin或者cos系列,就可以先求其其次微分方程的通解,然后通过公式求出特解。如果是其他的函数,就很难解决。傅里叶级数就是将所有的周期函数转化为sin和cos的乘积。这篇博客就是讲解傅里叶级数的推导。主要观点来自于网易麻省理工公开课

    傅里叶级数定义(有限傅里叶变换)

    一个以T为周期的实函数fT(t),如果在[T2,T2]上满足狄利克雷条件:
    (1)连续或只有有限个第一类间断点
    (2)只有有限个极值点

    fT(t)=a02+n=12(ancosnwt+bnsinnwt)

    其中:
    w=2πT,an=2TT2T2fT(t)cosnwtdt(n=0,1,2,)bn=2TT2T2fT(t)sinnwtdt(n=1,2,)

    证明

    简化一下:假设T=2π,则要证明的式子为:

    w=1,an=1πππfT(t)cosntdt(n=0,1,2,),bn=1πππfT(t)sinntdt(n=1,2,)

    函数的正交性(orthogonal)

    定义

    先给大家介绍一个概念:函数的正交性。
    有两个函数u(t),v(t),如果:

    ππu(t)v(t)=0
    则称这两个函数满足正交性(我忽略了视频中提到的周期,希望并没有是影响??)

    叫做正交的原因是因为,上式所求的就是两个函数的内积,与向量正交挺像的。而且目前,函数正交应用也很广泛。

    证明

    下面将要证明:对于所有的

    {sinnt,cosmt,n=(1,2,3,)m=(0,1,2,3,)
    这个函数集合中的任意两个函数,都满足正交性。

    傅里叶级数

    求解过程:

    f(t)=c0+n=0(ancosnt+bnsinnt)

    如果我们将两边都乘上cosnt,并求积分,则:
    ππf(t)cosntdt=ππ(c0+n=0(ancosnt+bnsinnt))cosntdt

    当将右边的式子展开后,就是:
    ππf(t)cosntdt=ππc0cosntdt++ππancos2ntdt+ππbnsinntcosntdt+

    由上面的正交性证明可以知道:等式右边除了ππancos2ntdt其余各项均为;
    则等式可以化解为:
    ππf(t)cosntdt=ππancos2ntdt

    ππcos2ntdt=π
    故可以求出an的值,相同的bn是同样的方法。
    展开全文
  • 该理论具有标量场的两个通用函数:势V(ϕ)和John系数函数Vj(ϕ)。 我们表明,对于这些功能的非常简单的选择,我们可以描述加速扩展,辐射主导的时代和物质主导的时代。 通过简单的修改,也可以描述那些和循环...
  • 在自然科学与工程技术中,很多问题的解决常常归结为线性方程组,如电学中的网络问题,船体数学放样中的建立三次样条函数问题,机械和建筑结构的设计和计算等等。因此,如何利用电子计算机这一强有力的计算工具去...
  • 在自然科学与工程技术中,很多问题的解决常常归结为线性方程组,如电学中的网络问题,船体数学放样中的建立三次样条函数问题,机械和建筑结构的设计和计算等等。因此,如何利用电子计算机这一强有力的计算工具去...
  • 在自然科学与工程技术中,很多问题的解决常常归结为线性方程组,如电学中的网络问题,船体数学放样中的建立三次样条函数问题,机械和建筑结构的设计和计算等等。因此,如何利用电子计算机这一强有力的计算工具去...
  • 数值分析软件 v1.1

    2008-04-23 19:46:02
    各部分简介如下: 线性方程组的数值解法: 在自然科学与工程技术中,很多问题的解决常常归结为线性方程组,如电学中的网络问题,船体数学放样中的建立三次样条函数问题,机械和建筑结构的设计和计算等等。...
  • 随便生成函数,显然答案为(∏(1+xti))m(\prod (1+x^{t_i}))^m(∏(1+xti​))m 外面的这个乘方可以直接快速,时间复杂度O(elg⁡elg⁡m)O(e\lg e \lg m)O(elgelgm)。 重点是如何计算里面的这个东西。 由于∑ti≤...

    题目


    正解

    随便生成函数,显然答案为((1+xti))m(\prod (1+x^{t_i}))^m
    外面的这个乘方可以直接快速幂,时间复杂度O(elgelgm)O(e\lg e \lg m)
    重点是如何计算里面的这个东西。

    由于ti2e7\sum t_i\leq2e7,所以不同的titi的个数大概是ti\sqrt {\sum t_i},约等于60006000
    tit_i相同的一起计算,用个组合数就可以做到O()O(个数)处理,然后花O(tielge)O(\sqrt {\sum t_i}e\lg e)的时间来将tit_i不同的合并起来。
    然而常数太大TLE了……
    这时候可以想到当个数比较少的时候,直接暴力做。
    定义一个阈值,理论上这个阈值设lge\lg e最优,实际上这只有85分。
    跑个大数据,然后手动三分一下阈值,发现当这个阈值设为10001000的时候跑得最快。
    于是就过了……

    当然上面那样做是水法。
    正解是一个见过一次就可能不会忘的小科技。
    考虑这题本质上就是做一个长度为ee的循环卷积。题目给出的xx显然就是ee次单位根(xe(modp)x^e\equiv \pmod p)。
    如果我们求出了长度为eeDFTDFT,在这个DFTDFT上操作一波之后再IDFTIDFT回去,那就可以达到一个优秀的时间复杂度。

    现在的问题是如何求这个东西:(注意我们平常求的DFTDFT要将长度凑到2k2^k形式的,这样算的循环卷积就是2k2^k长度的循环卷积,和我们要求的不同)
    记单位根为ωe\omega_e(就是题目的xx),我们要求F(ωek)F(\omega_e^k),其中k[0,e)k\in [0,e)
    F(ωek)=i=0e1aiωik=i=0e1aiωek2+i2(ki)22=i=0e1aiω2ek2+i2(ki)2=ω2ek2i=0e1aiω2ei2ω2e(ki)2F(\omega_e^k)=\sum_{i=0}^{e-1}a_i\omega^{ik} \\ =\sum_{i=0}^{e-1} a_i\omega_e^{\frac{k^2+i^2-(k-i)^2}{2}} \\ =\sum_{i=0}^{e-1} a_i\omega_{2e}^{k^2+i^2-(k-i)^2} \\ =\omega_{2e}^{k^2}\sum_{i=0}^{e-1} a_i\omega_{2e}^{i^2}\omega_{2e}^{-(k-i)^2}
    后面的显然是个卷积,于是NTT即可(这个NTT和我们这里说了求长度为ee的DFT没有什么关系,不要混淆……)
    不过有时候ωe\omega_e没有平方根,那么还有另一种拆分方式:
    F(ωek)=i=0e1aiωik=i=0e1aiωeCk+i2Ck2Ci2F(\omega_e^k)=\sum_{i=0}^{e-1}a_i\omega^{ik} \\ =\sum_{i=0}^{e-1} a_i\omega_e^{C_{k+i}^2-C_k^2-C_i^2}
    同样可以求得。
    至于IDFTIDFT,用ω1\omega^{-1}代进去,最终结果乘e1e^{-1}即可。

    对于这题,直接套用这个做法可以得到和暴力差不多的时间(除快速幂部分外,快速幂部分直接在点值上快速幂)。
    这题有个更简单的实现方式:对于一个1+xti1+x^{t_i},直接将ωek,k[0,e)\omega_e^k,k\in[0,e)代进去,就可以快速地计算出它的DFTDFT。然后它的乘方就直接在点值上乘方,接着将tit_i不同的按对应的位置乘在一起,再把每个位置取mm次方,最后IDFTIDFT回来。
    于是真正需要实现上面这个算法的部分就只有一次IDFTIDFT啊……


    代码

    水法

    using namespace std;
    #include <cstdio>
    #include <cstring>
    #include <algorithm>
    #include <cmath>
    #define N 1000010
    #define mo 998244353
    #define E 131072
    #define T 20000000
    #define ll long long
    ll qpow(ll x,int y=mo-2){
    	ll r=1;
    	for (;y;y>>=1,x=x*x%mo)
    		if (y&1)
    			r=r*x%mo;
    	return r;
    }
    int n,m,x,e;
    int t[N];
    int nN,re[E],w[E];
    void setlen(int n){
    	int bit=0;
    	for (nN=1;nN<=n;nN<<=1,bit++);
    	re[0]=0;
    	for (int i=1;i<nN;++i)
    		re[i]=re[i>>1]>>1|(i&1)<<bit-1;
    }
    void clear(ll A[],int n){
    	memset(A,0,sizeof(ll)*n);
    }
    void dft(ll A[],int flag){
    	for (int i=0;i<nN;++i)
    		if (i<re[i])
    			swap(A[i],A[re[i]]);
    	for (int i=1;i<nN;i<<=1){
    		ll wn=qpow(3,(flag==1?(mo-1)/(2*i):mo-1-(mo-1)/(2*i)));
    		w[0]=1;
    		for (int k=1;k<i;++k)
    			w[k]=(ll)w[k-1]*wn%mo;
    		for (int j=0;j<nN;j+=i<<1)
    			for (int k=0;k<i;++k){
    				ll x=A[j+k],y=w[k]*A[j+k+i];
    				A[j+k]=(x+y)%mo;
    				A[j+k+i]=(x-y+(ll)mo*mo)%mo;
    			}
    	}
    	if (flag==-1){
    		ll invn=qpow(nN);
    		for (int i=0;i<nN;++i)
    			A[i]=A[i]*invn%mo;
    	}
    }
    void multi(ll c[],ll a[],ll b[],int n){
    	static ll A[E],B[E];
    	setlen(n*2);
    	clear(A,nN);
    	for (int i=0;i<n;++i)
    		A[i]=a[i];
    	dft(A,1);
    	if (a!=b){
    		clear(B,nN);
    		for (int i=0;i<n;++i)
    			B[i]=b[i];
    		dft(B,1);
    		for (int i=0;i<nN;++i)
    			c[i]=A[i]*B[i]%mo;
    	}
    	else{
    		for (int i=0;i<nN;++i)
    			c[i]=A[i]*A[i]%mo;
    	}
    	dft(c,-1);
    	for (int i=n;i<nN;++i){
    		(c[i-n]+=c[i])%=mo;
    		c[i]=0;
    	}
    }
    ll fac[N],ifac[N];
    ll C(int m,int n){return fac[m]*ifac[n]%mo*ifac[m-n]%mo;}
    ll F[E],G[E],H[E];
    struct Ans{
    	int a,b;
    } ans[N];
    int cnt;
    bool cmpa(Ans x,Ans y){return x.a<y.a;}
    int main(){
    //	freopen("in.txt","r",stdin);
    //	freopen("out.txt","w",stdout);
    	freopen("number.in","r",stdin);
    	freopen("number.out","w",stdout);
    	scanf("%d%d%d",&n,&m,&x);
    	for (int i=1,pw=x;i<=50000;++i,pw=(ll)pw*x%mo)
    		if (pw==1){
    			e=i;
    			break;
    		}
    	fac[0]=1;
    	for (int i=1;i<=n;++i)
    		fac[i]=fac[i-1]*i%mo;
    	ifac[n]=qpow(fac[n]);
    	for (int i=n-1;i>=0;--i)
    		ifac[i]=ifac[i+1]*(i+1)%mo;	
    	for (int i=1;i<=n;++i)
    		scanf("%d",&t[i]);
    	sort(t+1,t+n+1);
    	H[0]=1;
    	int B=/*log2(e)*/1000;
    	for (int i=1,j=1;i<=n;++i)
    		if (t[i]!=t[i+1]){
    			int l=i-j+1;
    			if (l>B){
    				for (int k=0;k<=l;++k)
    					F[(ll)k*t[i]%e]+=C(l,k);
    				multi(H,H,F,e);
    				for (int k=0;k<=l;++k)
    					F[(ll)k*t[i]%e]=0;
    			}
    			else{
    				while (l--){
    					for (int k=e-1;k>=0;--k)
    						(H[k+t[i]]+=H[k])%=mo;
    					for (int k=e-1+t[i];k>=e;--k)
    						(H[k-e]+=H[k])%=mo,H[k]=0;
    				}
    			}
    			j=i+1;
    		}
    	G[0]=1;
    	for (;m;m>>=1,multi(H,H,H,e))
    		if (m&1)
    			multi(G,G,H,e);
    	for (int i=0,pw=1;i<e;++i,pw=(ll)pw*x%mo){
    		int a=pw,b=G[i];
    		if (b)
    			ans[++cnt]={a,b};
    	}
    	sort(ans+1,ans+cnt+1,cmpa);
    	for (int i=1;i<=cnt;++i)
    		printf("%d %d\n",ans[i].a,ans[i].b);
    	return 0;
    }
    
    展开全文
  • 二进制是基数为2,每位的权是以2 为底的的进制,遵循逢二进一原则,基本符号为0和1。采用二进制码表示信息,有如下几个优点:1.易于物理实现;2.二进制数运算简单;3.机器可靠性高;4.通用性强。其缺点是它表示数...
  • 在假设量纲和标量场均假设的情况下,定律函数为(∂ϕ)2的k本质理论和具有标量场的Rastall的非保守引力理论具有相同的。 取决于一个坐标。 这种等价关系(称为k–R对偶)适用于具有各种对称性(球形,平面,...
  • 本书介绍了构建更优雅、更有效的软件的更省时技术、... 18.4 用公式来描述其他难函数 345 18.5 习题 350 参考答案 351 附录A 4位计算机算术运算表 395 附录B 牛顿法 400 附录C 各种离散函数图像 402 参考文献 412
  • 从精确的中,我们提取出针对尖尖异常以及其中出现的各种特定先验结构的生成函数。 我们讨论的第二个限制是小尖角角度的范围。 在这种较简单的情况下,我们展示了如何通过一种适用于相关Schrödinger问题基态的全...
  • 并强调这些数值分析方法在计算机上如何实现,内容包括:数值计算的引论、非线性方程求根、插值与拟合、数值微分和数值积分、常微分方程初值问题的数值解法、线性代数方程组的高斯消去法和迭代解法、矩阵特征值问题...
  • 算法导论(原书第三版)

    热门讨论 2013-03-06 14:31:34
    14.2 如何扩张数据结构 14.3 区间树 思考题 本章注记 第四部分 高级设计和分析技术 第15章 动态规划 15.1 钢条切割 15.2 矩阵链乘法 15.3 动态规划原理 15.4 最长公共子序列 15.5 最优二叉搜索树 思考题 本...
  • 1.4 如何提交解答 1.4.1 POJ的提交方法 1.4.2 GCJ的提交方法 1.5 以高效的算法为目标 1.5.1 什么是复杂度 1.5.2 关于运行时间 1.6 轻松热身 1.6.1 先从简单题开始 1.6.2 POJ的题目Ants 1.6.3 难度增加的抽签问题 ...
  • 潘震皓 -《置换群快速运算研究与探讨》 胡伟栋 -《非完美算法在信息学竞赛中的应用》 何 林 -《数据关系的简化》 汪 汀 -《参数搜索的应用》 周 源 -《浅谈信息学竞赛中的“压缩法”》 朱泽园 -《回到起点 --...
  • 算法导论中文版

    2016-10-26 10:13:58
     14.2 如何扩张数据结构  14.3 区间树  思考题  本章注记 第四部分 高级设计和分析技术 第15章 动态规划  15.1 钢条切割  15.2 矩阵链乘法  15.3 动态规划原理  15.4 最长公共子序列  15.5 最优...
  • + [母函数](#母函数) + [拟阵](#拟阵) + [线性规划](#线性规划) + [置换群](#置换群) + [问答交互](#问答交互) + [猜数问题](#猜数问题) * [数据结构](#数据结构) + [数据结构](#数据结构-1) + [结构联合]...
  • 算法导论(part2)

    2010-09-09 22:54:12
    一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的。 在那些不太适合于本科生、更适合于研究生的章节和练习前面,都加上了星号(*)。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多...
  • 算法导论(part1)

    2010-09-09 22:51:05
    一般来说,这些思考题都会包含几个小问题,引导学生逐步得到问题的。 在那些不太适合于本科生、更适合于研究生的章节和练习前面,都加上了星号(*)。带星号的章节也不一定就比不带星号的更难,但可能要求了解更多...
  • word使用技巧大全

    热门讨论 2011-03-18 20:37:53
    92、三种好学有用的Excel函数应用 96 94、字体大小任我调 96 95、复制Word格式又一法 96 96、大文档的页码编排 96 97、让你受益终身的10个word的使用技巧 97 98 其他常用技巧 98 99、Word中查找/替换通配符和代码 ...
  • isin()函数用于构建布尔对象,便于删选dateframe的行, pandas中isin()函数及其逆函数使用 建议用loc和iloc选择行 loc以行索引和列索引key来选择元素 iloc以行列所在的整数索引来选择元素,不过都从0开始 待续 ...
  • java范例开发大全(pdf&源码)

    热门讨论 2013-07-04 13:04:40
    实例183 求n的数与倍数 304 实例184 商品订单 306 实例185 多功能排序 310 第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数...
  • Java范例开发大全 (源程序)

    热门讨论 2011-04-27 07:47:22
     实例183 求n的数与倍数 304  实例184 商品订单 306  实例185 多功能排序 310  第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对数值 316 ...
  • java范例开发大全源代码

    热门讨论 2011-10-30 23:31:51
     实例183 求n的数与倍数 304  实例184 商品订单 306  实例185 多功能排序 310  第11章 Java常用类(教学视频:66分钟) 315  11.1 数学Math类 315  实例186 求圆周率∏值 315  实例187 求对...
  • java范例开发大全

    2013-03-08 20:06:54
    实例183 求n的数与倍数 304 实例184 商品订单 306 实例185 多功能排序 310 第11章 Java常用类(教学视频:66分钟) 315 11.1 数学Math类 315 实例186 求圆周率∏值 315 实例187 求对数值 316 实例188 使用取整函数...
  • 数据结构演示软件

    2013-06-02 21:32:36
    五、 如何使用本课件 读者可以利用鼠标移动光标选择“演示算法”或“菜单命令”来控制课件的运行过程。 1. 课件的演示算法菜单为页式菜单。第一级菜单中的各项与上述“系统内容”中各大项相对应,读者运行“算法...
  • 五、 如何使用本课件 读者可以利用鼠标移动光标选择“演示算法”或“菜单命令”来控制课件的运行过程。 1. 课件的演示算法菜单为页式菜单。第一级菜单中的各项与上述“系统内容”中各大项相对应,读者运行“算法...

空空如也

空空如也

1 2
收藏数 35
精华内容 14
关键字:

如何解幂函数