To read the following procedure, please answer the following questions:
Question 1: What are the criteria for this program?
Question 2: Does such a number exist? What is the minimum number that meets this condition?
Question 3: How long do you expect to be able to output the first result when running this program on a computer? The time is accurate to minutes (computer: Single core CPU 4.0G Hz, memory and hard disk resources are sufficient).
Question 4: How can I improve the efficiency of this program on multi-core computers?
Using System;
Using System.Collections.Generic;
Using System.Text;
Namespace Findthenumber
{
Class Program
{
static void Main (string[] args)
{
int [] RG =
{2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,
20,21,22,23,24,25,26,27,28,29,30,31};
for (Int64 i = 1; i < int64.maxvalue; i++)
{
int hit = 0;
int hit1 =-1;
int hit2 =-1;
for (int j = 0; (J < RG. Length) && (hit <=2); J + +)
{
if ((i% rg[j])! = 0)
{
hit++;
if (hit = = 1)
{
Hit1 = j;
}
else if (hit = = 2)
{
Hit2 = j;
}
Else
Break
}
}
if (hit = = 2) && (HIT1+1==HIT2))
{
Console.WriteLine ("Found {0}", i);
}
}
}
}
}
Before the teacher just to finish this topic, I ran a code, and so on for a long time, should have half an hour, has not produced results, has been black box, at that time is quite depressed, there is no longer run, the results are as follows. Then began the Baidu program part of the code meaning, in for (Int64 i = 1; i < int64.maxvalue; i++) Int64 is a signed 64-bit integer data type, that is, the result should be a 1 to 2^63-1 (+9,223,372,0 36,854,775,807) between the one I. If this number is always looking down, how big it is, the biggest number has 19!!!
After analyzing the whole program, I understand that this program is known to be able to find Console.WriteLine ("found {0}", i) in the IF ((hit = = 2) && (HIT1+1==HIT2)) Condition: Hit =2,hit2=1,hit1=0, that is, to find an int [] RG array of two contiguous numbers,I cannot divide them evenly . Through two nested loops: for (Int64 i = 1; i < int64.maxvalue; i++), A for (int j = 0; (J < RG. Length) && (hit <=2); J + +) to achieve this process of finding numbers. Before I find these two numbers, I can divide the number I have before, wow, my head is going to break.
But I think such a number should exist, though I have not figured it out.
C # code Analysis