zoukankan      html  css  js  c++  java
  • The Ninth Hunan Collegiate Programming Contest (2013) Problem J

    Problem J

    Joking with Fermat's Last Theorem

    Fermat's Last Theorem: no three positive integers a, b, and c can satisfy the equation an + bn = cn for any integer value of n greater than two.

    From the theorem, we know that a3 + b3 = c3 has no positive integer solution.

    However, we can make a joke: find solutions of a3 + b3 = c3. For example 43 + 93 = 793, so a=4, b=9, c=79 is a solution.

    Given two integers x and y, find the number of solutions where x<=a,b,c<=y.

    Input

    There will be at most 10 test cases. Each test case contains a single line: x, y (1<=x<=y<=108).

    Output

    For each test case, print the number of solutions.

    Sample Input

    1 10
    1 20
    123 456789
    

    Output for the Sample Input

    Case 1: 0
    Case 2: 2
    Case 3: 16
    

    The Ninth Hunan Collegiate Programming Contest (2013) Problemsetter: Rujia Liu Special Thanks: Md. Mahbubul Hasan, Feng Chen

       这道题有一个突破口,就是a, b <=1000 ,这样子算法就变成了 O(1000*1000)。

    #include <iostream>
    #include <stdio.h>
    #include <queue>
    #include <stdio.h>
    #include <string.h>
    #include <vector>
    #include <queue>
    #include <set>
    #include <algorithm>
    #include <map>
    #include <stack>
    #include <math.h>
    #define Max(a,b) ((a)>(b)?(a):(b))
    #define Min(a,b) ((a)<(b)?(a):(b))
    using namespace std ;
    typedef long long LL ;
    LL N_3[1001] ;
    int  x , y ;
    void init(){
        for(int i=1;i<=1000;i++)
              N_3[i]=i*i*i  ;
       // cout<<N_3[1000]<<endl ;
    }
    int calc(){
        int a_up ,b_up ,c ,sum ,ans=0 ;
        a_up=Min(y,1000) ;
        b_up=Min(y,1000) ;
        for(int a=x;a<=a_up;a++)
            for(int b=x;b<=b_up;b++){
                  sum=N_3[a]+N_3[b] ;
                  if(sum%10==3){
                       int c=sum/10 ;
                       if(x<=c&&c<=y)
                            ans++ ;
                  }
        }
        return ans ;
    }
    int main(){
        init() ;
        int k=1 ;
        while(scanf("%d%d",&x,&y)!=EOF){
            printf("Case %d: %d
    ",k++ ,calc()) ;
        }
        return 0 ;
    }
  • 相关阅读:
    .NET总结
    gzip压缩输出
    矩阵 快速幂
    Mock单元测试
    mysql乱码原因之一
    写个android下倒计时软件
    linux gcc下实现简单socket套接字小程序
    gcc下MD5破解
    #1045 Access denied for user 'root'@'localhost'
    转android四种动画
  • 原文地址:https://www.cnblogs.com/liyangtianmen/p/3370007.html
Copyright © 2011-2022 走看看