WustOj--1546传说中的教主(思维,脑洞)

来源:互联网 发布:sleep php函数毫秒 编辑:程序博客网 时间:2024/05/22 14:46

1546: 传说中的教主

Time Limit: 1 Sec  Memory Limit: 128MB   64bit IO Format: %lld
Submitted: 38  Accepted: 18
[Submit][Status][Web Board]

Description

众所周知,ZiP有一个室友叫老郭,是个满分帅气暖男,只是有个习惯是*狗。
然而老郭是一个强迫症患者,他*的狗必须满足以下条件:
首先他会把n只狗排成一排,从1到n依次编号。
接着他会让ZiP给他报一个整数m。
然后任意选出三只狗编号为x,y,z,如果能满足x^m+y^m=z^m(分别代表x,y,z的m次方),则会把狗*掉。
那么问题来了,对于n只狗,已经ZiP给定的一个数m,老郭有多少种可能*到狗?

Input

多组测试数据(不超过10组),每组一行。
有2个数,第一个是n(1<=n<=5000),第二个是m(1<=m<=100)

Output

每组输出一行,代表老郭能*到狗的可能数。

Sample Input

3  1

1000  2

1000  1

 

Sample Output

1

881

249500

 

HINT

对于第一组样例,(1,2,3)满足,所以输出为1。

 

(1,2,3)和(2,1,3)视为同一组

 

Author

ZiP

 

 

题目最后只需要考虑1和2的情况

2以后的数字,都找不到一个三元对符合条件

有兴趣的同学可以通过数学证明出来


#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>#include<functional>#include<cmath>using namespace std;  int main(){    int n,m;    int i,j,k;    long long a,b,c,d;    long long cnt;    while(scanf("%d%d",&n,&m)!=EOF)    {        cnt=0;        if(m==1)        {            k=n;            for(i=1;i<=n-2;i++)            {                if(k-2>0)                {                    cnt+=(k-2);                    k-=2;                }            }        }        else if(m==2)        {            for(i=1;i<=n;i++)            {                for(j=i+1;j<=n;j++)                {                    a=i*i;                    b=j*j;                    d=(long long)sqrt(a+b);                    c=d*d;                    if(a+b==c&&c>b&&d<=n)                        cnt++;                }            }        }        else            cnt=0;        printf("%ld\n",cnt);    }}

已下搬自百度回答

据说1995年已经被安德鲁.怀尔斯解决了,论文有200页.用的理论是椭圆曲线和模型式.
我来水一下,说不定就是费尔玛当年的绝妙的想法:
假设X^n+Y^n=Z^n,其中XYZn为正整数,当n>2时,XYZ有正整数解,设n=2+m,而我们知道:
方程X^2+Y^2=Z^2是有解的:x=a^2-b^2,y=2ab,z=a^2+b^2,那么
x^(2+m)+y^(2+m)=z^(2+m)意味着:x^2(x^m-1)+y^2(y^m-1)=z^2(z^m-1)
这样,x^m-1=1,y^m-1=1,z^m-1=1,x=2^(1/m),y=2^(1/m),z=2^(1/m)
所以:x=y=z,x^n+y^n=2x^n=z^n=x^n,得出:2=1,矛盾,因此原方程没有正整数解.


原创粉丝点击