zoukankan      html  css  js  c++  java
  • UVALive

    这里写图片描述

    题意:求有多少个三元组(x,y,z)满足 0<=x<=y<=z<=m 且 x^j + y^j = z^j. 其中输入m,和n, 且
    2≤j≤n。

    费马大定理:当整数n >2时,关于x, y, z的方程 x^n + y^n = z^n 没有正整数解。
    因此ans计算的只是当题目中的j=2时有解的情况数量
    而x,y,z是指m的值,每个m都要配一个不同的n,因此(m+1)表示从0到m个数,xyz都会取到,并且从小到大,n从2到n,共n-1个数
    配对种数(m+1)*(n-1)个,这就只考虑了y,z两个数,因为x固定是0,当x不是0的时候,就是考虑了3个数
    考虑3个数的情况,只有j=2有解,用循环来暴力找有几个满足条件,然后,三层循环暴力包括了只考虑y,z时的情况
    避免重复,计算时,(m+1)*(n-2)就去除了j=1和j=2两种情况
    当然,如果循环暴力找的起点,从1开始而不从x=0开始,ans+(m+1)*(n-1)也是正确的,不会重复

    #include<stdio.h>
    int main()
    {
        int m,n;
        while(scanf("%d%d",&m,&n)!=EOF)
        {
            int ans=0;
            for(int i=1;i<=m;i++)///for(int i=0;i<=m;i++)
            {
                for(int j=i;j<=m;j++)
                {
                    int sum=i*i+j*j;
                    for(int k=j;k<=m;k++) if(k*k==sum)ans++;
                }
            }///ans+(m+1)*(n-1)
            printf("%d
    ",ans+(m+1)*(n-1));///当0=x时,只要y=z,就行,那么就有(m+1)*(n-1)个,因为y可能从0取到m,j可以从2取到n。
        }///当0!=x时,那么只要一个勾股定理能构成,只要幂大于2,就一下没解,所以我们把第一种中拿出j=2时,的特殊情况,特殊考虑。
    }
  • 相关阅读:
    swift 获取iphone设备型号
    如何判断静态库是否支持64位
    MAC登录界面多了一个其他账户
    swift4 UIScrollView滑动手势与UIPageViewController冲突解决办法
    swift 保留两位小数以及前面不0
    本地通知
    swift3 UIColor扩展
    swift3 控件创建
    数据库--数据库事务
    数据库---触发器trigger
  • 原文地址:https://www.cnblogs.com/kuronekonano/p/11135837.html
Copyright © 2011-2022 走看看