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

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,矛盾,因此原方程没有正整数解.


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值