嗨我需要生成两个随机整数,如果我将第一个整数除以第二个整数,则提醒应为0.我正在寻找方法来做到这一点。两个整数也应大于0
Random rnd=new Random();
int firstNum=rnd.nextInt();
int secondNum=rnd.nextInt();
//Some efficient calculations here to make firstNum % secondNum equals 0.
我希望 firstNum%secondNum 等于 0 。
答案 0 :(得分:1)
这是一个简单的算法:
第二个数字的唯一有效选择是第一个数字的除数。如果第一个数字是素数,那么可能的选择集可以小到2,如果是1,那么可以选择零,并且数字本身不是可接受的答案(你没有指定)。
另一种方法是只生成第二个数字的随机数,并检查它们是否除了第一个数字,但这可能需要 非常 很长时间,特别是如果第一个数字是一个大素数。不推荐。
答案 1 :(得分:0)
CREATE PROCEDURE dbo.CustomTasksHistory
(
@Username NVARCHAR(255)
)
AS
DECLARE @TempTableStatus TABLE
(
ItemID INT ,
SequenceID INT ,
TaskStatus NVARCHAR(25) ,
ListID UNIQUEIDENTIFIER ,
WebID UNIQUEIDENTIFIER ,
SiteID UNIQUEIDENTIFIER
);
DECLARE @ItemID INT;
DECLARE @SequenceID INT;
DECLARE @ListID UNIQUEIDENTIFIER;
DECLARE @WebID UNIQUEIDENTIFIER;
DECLARE @SiteID UNIQUEIDENTIFIER;
DECLARE @AssignTask VARCHAR(25);
SET @AssignTask = 'Assign task';
-- Select final TaskStatus of each ItemID with its SequenceID --
DECLARE cursor_ItemID CURSOR FAST_FORWARD READ_ONLY FOR
SELECT DISTINCT
WI.ItemID ,
WP.SequenceID ,
WI.ListID ,
WI.WebID ,
WI.SiteID
FROM dbo.WInstance WI
INNER JOIN dbo.WProgress WP ON WI.InstanceID = WP.InstanceID
WHERE WP.CurrentActivityTitle = @AssignTask;
OPEN cursor_ItemID;
FETCH NEXT FROM cursor_ItemID INTO @ItemID, @SequenceID, @ListID, @WebID, @SiteID;
WHILE @@FETCH_STATUS = 0
BEGIN
INSERT INTO @TempTableStatus
( ItemID ,
SequenceID ,
TaskStatus ,
ListID ,
WebID ,
SiteID
)
SELECT TOP 1
WI.ItemID ,
WP.SequenceID ,
CASE WHEN WP.ActivityComplete = 0
THEN 'Not Started'
ELSE 'Completed'
END AS 'TaskStatus' ,
WI.ListID ,
WI.WebID ,
WI.SiteID
FROM dbo.WInstance WI
INNER JOIN dbo.WProgress WP ON WI.InstanceID = WP.InstanceID
WHERE WP.CurrentActivityTitle = @AssignTask
AND WI.ItemID = @ItemID
AND WP.SequenceID = @SequenceID
AND WI.ListID = @ListID
AND WI.WebID = @WebID
AND WI.SiteID = @SiteID
ORDER BY TimeStamp DESC;
FETCH NEXT FROM cursor_ItemID INTO @ItemID, @SequenceID, @ListID, @WebID, @SiteID;
END;
CLOSE cursor_ItemID;
DEALLOCATE cursor_ItemID;
SELECT *
FROM @TempTableStatus;
这种方法可能比其他方法花费更多时间,但它符合您问题的基本概念,因为它产生两个随机数,而不管其他数字的知识,因此它不关心数字是素数,奇数还是甚至。它会给你两个数字,它们相互分开,给出余数为0。
答案 2 :(得分:0)
如果您可以为firstNumber和secondNumber提供限制,那么您可以尝试以下解决方案。
public static void Main()
{
var random = new Random();
int firstNo = random.Next(800);
int secondNo = random.Next(400);
while(firstNo % secondNo != 0)
{
secondNo = random.Next(400);
}
Console.WriteLine(firstNo);
Console.WriteLine(secondNo);
}
}
第二个随机数的种子是400,因为数字的除数总是该数字本身或其值的一半。
也许你可以修改它以适合你的场景。
答案 3 :(得分:0)
我会把算法略微转过头来。
你想要的是两个整数,两者都具有某种随机性(彼此独立),这样firstNumber / secondNumber = K + 0,其中K是某个整数。但是如果你求解firstNumber,那就意味着firstNumber = secondNumber * K.所以不是直接生成secondNumber,而是生成K.
Random#nextInt(int bound) + 1
(您需要turl = 'http://portfolios.morningstar.com/fund/summary?t=SPY'
test_html = read_html(turl)
df<-html_table(test_html, fill = TRUE)
,因为+ 1
可能会返回0)。现在你有了两个号码。你知道secondNumber / firstNumber的余数为0,因为secondNumber / firstNumber = K,其中K是你选择的第二个随机整数。