当前位置: 首页 > 知识库问答 >
问题:

使用SQL查找可从给定范围整除的最小正数

尉迟韬
2023-03-14

例如:2520是被1到10的每个数字除以的最小正数。

请帮助我使用SQL逻辑查找1到20之间的最小正数

共有1个答案

丁理
2023-03-14

是13 693 680?http://rextester.com/APWPAS87659

假设结果是

暴力:

with
number as (
SELECT TOP (15000000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
    CROSS JOIN sys.all_objects AS s3
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 + n%10 + n%9 + n%8 + n%7 + n%6 + n%5 + n%4 + n%3 + n%2 + n%1 = 0 then n
   end)
from
   number
;

==

假设解是10的倍数:

with
number as (
SELECT TOP (1500000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) * 10 as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
    CROSS JOIN sys.all_objects AS s3
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 + n%10 + n%9 + n%8 + n%7 + n%6 + n%5 + n%4 + n%3 + n%2 + n%1 = 0 then n
   end)
from
   number
;

只需快10倍。

假设结果是2520的倍数(最小的正数除以1到10的每个数字),6 000*2 520

with
number as (
SELECT TOP (6000) 
    CONVERT(BIGINT, ROW_NUMBER() OVER (ORDER BY s1.object_id)) * 2520 as n
FROM
    sys.all_objects AS s1 
    CROSS JOIN sys.all_objects AS s2
)
select
   min(n),
   max(n),
   min(
   case
   when n%20 + n%19 + n%18 + n%16 + n%15 + n%14 + n%13 + n%12 + n%11 = 0 then n
   end)
from
   number

非常快(比第一个提案快约x2520)。

 类似资料:
  • 问题内容: 我有以下三个简单的T-SQL查询。第一个是获取一定范围内的记录(DATETIME类型): 第二个是获取最接近@startDT的记录(DATETIME类型) 最后一个是获取@endDT之后最接近的记录: 我想将以上三个查询的所有记录作为一组记录。我尝试使用UNION,但似乎UNION中的子查询不允许使用ORDER BY子句。有没有有效的方法来得到我的结果? 上图仅将* s的记录显示为我的

  • 本文向大家介绍可被C整除的最大正整数,在C ++中范围为[A,B],包括了可被C整除的最大正整数,在C ++中范围为[A,B]的使用技巧和注意事项,需要的朋友参考一下 在这里,我们将看到一个有趣的问题。让我们考虑我们有三个整数A,B和C。我们必须找到一个最小整数X,使得X mod C = 0,并且X不在[A,B]范围内。如果A,B和C的值分别为5、10和4,那么X的值为4。我们必须按照以下步骤获得

  • 我有N个数字,让我们说。现在我想找出在给定范围内有多少对数字。(L和R给定)。数字对=两个数字相同。我的方法:

  • 本文向大家介绍使用PHP从给定的整数中查找月份,包括了使用PHP从给定的整数中查找月份的使用技巧和注意事项,需要的朋友参考一下 如果您需要从给定的整数(1到12)中了解月份,则可以使用以下代码段。这将返回字符串“ Feb”。 date("M", mktime(0, 0, 0, 2)); 可以将其封装到一个函数调用中,该函数调用将采用1到12之间的数字,并返回该月的相应字符串。此功能包括一些简单的错

  • 所以我必须写一个程序,找到给定范围之间的所有回文数。程序必须使用numDigits()方法,该方法接受int数并返回该int的位数。 一个isPalindrome()方法,它将接受一个int数字,并返回一个布尔值true或false,无论该数字是否回文 我在这里编码了一个numDigit()方法: 我知道如何用另一种方法找到回文,但作业是专门针对这种技术的。我如何实现这个numDigit()方法来

  • 我试图解决下面提供的Codness中的一个问题, 编写一个函数: 给定一个由N个整数组成的数组A,返回A中不出现的最小正整数(大于0)。 例如,给定A=[1,3,6,4,1,2],函数应该返回5。 假定: N是范围[1...100,000]内的整数;数组A的每个元素都是范围[−1,000,000..1,000,000]内的整数。 预期最坏情况时间复杂度为O(N);预计最坏情况下的空间复杂度为O(N