zoukankan      html  css  js  c++  java
  • HDU 4279 Number-------找规律题

    Number

    Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 2159    Accepted Submission(s): 614


    Problem Description
      Here are two numbers A and B (0 < A <= B). If B cannot be divisible by A, and A and B are not co-prime numbers, we define A as a special number of B.
      For each x, f(x) equals to the amount of x’s special numbers.
      For example, f(6)=1, because 6 only have one special number which is 4. And f(12)=3, its special numbers are 8,9,10.
      When f(x) is odd, we consider x as a real number.
      Now given 2 integers x and y, your job is to calculate how many real numbers are between them.
     
    Input
      In the first line there is an integer T (T <= 2000), indicates the number of test cases. Then T line follows, each line contains two integers x and y (1 <= x <= y <= 2^63-1) separated by a single space.
     
    Output
      Output the total number of real numbers.
     
    Sample Input
    2
    1 1
    1 10
    Sample Output
    0
    4
     
    这道题,同样的没有思路的题目。
    有的人说,1000ms,题目复杂,就想到是找规律了。这规律.....。
    1->x : ans
                1-1:0
                1-2:0
                1-3:0
                1-4:0
                1-5:0//x小于等于5之前都是0。5/2-2 = 0
                1-6:1//x是某个数的平方和,且k为偶数。则不变 6/2-2 = 1;
                1-7:1//x是某个数的平方和,且k为偶数。则不变 7/2-2 = 1;
                1-8:2    
                1-9:3//x是某个数k的平方和,且k为奇数。加1  9/3-2 + 1 = 3;
                1-10:4
                1-11:4
                1-12:5
                1-13:5
                1-14:6//x是某个数k的平方和,且k为奇数。加1  14/2-2 + 1 = 6;
                1-15:6
                1-16:6//x是某个数k的平方和,且k为偶数。则不变  16/2-2 = 6;
                1-17:6
                1-18:6
                1-19:7
                1-20:8
                1-21:8
                1-22:9
                1-23:9
                1-24:10
                1-25:11//x是某个数k的平方和,且k为奇数。加1   25/2 -2 + 1 = 11;
                1-26:12
    还有考虑区间的问题求的是[n,m]=[1,m]-[1,n-1];
     1 /*
     2 我只能说,以后遇到复杂度高,
     3 时间小的题目
     4 找规律是一种切入方式
     5 
     6 */
     7 
     8 #include<stdio.h>
     9 #include<math.h>
    10 #include<stdlib.h>
    11 
    12 __int64 make_ini(__int64 num)
    13 {
    14     __int64 tmp=num;
    15     if(num<6)
    16     return 0;
    17     tmp=(num>>1)-2;
    18     num=(__int64)sqrt(num*1.0);
    19     if(num%2==1)
    20     tmp++;
    21     return tmp;
    22 }
    23 
    24 int main()
    25 {
    26     __int64 T,n,m;
    27     while(scanf("%I64d",&T)>0)
    28     {
    29         while(T--)
    30         {
    31             scanf("%I64d%I64d",&n,&m);
    32             printf("%I64d
    ",make_ini(m)-make_ini(n-1));
    33         }
    34         return 0;
    35     }
    36     return 0;
    37 }
  • 相关阅读:
    Java synchronized详解
    How to Use Lambda Expressions in a Query
    生活工作记录
    SilverLight中的几何形状 (转)
    用CSS改变鼠标样式
    SCRUM 敏捷开发 基础及失败成功案例分析
    JavaScript Create GUID function
    数据结构排序
    JSON简介
    追逐所求,享受所有
  • 原文地址:https://www.cnblogs.com/tom987690183/p/3245195.html
Copyright © 2011-2022 走看看