HDU 4279 Number------法則の問題を探します
6429 ワード
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
この問題は、同じように考えのない問題です.
ある人は、1000 ms、テーマが複雑で、法則を探していると思っています.この法則は.......
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]を求める.
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
この問題は、同じように考えのない問題です.
ある人は、1000 ms、テーマが複雑で、法則を探していると思っています.この法則は.......
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 }