ค้นหาผลรวมของตัวเลขทั้งหมดด้านล่าง n ซึ่งเป็นชุดของตัวเลขบางชุด


31

เกือบเทียบเท่ากับคำถามแรกของ Project Euler:

หากเราแสดงจำนวนธรรมชาติทั้งหมดต่ำกว่า 10 ที่เป็นทวีคูณของ 3 หรือ 5 เราจะได้ 3, 5, 6 และ 9 ผลรวมของทวีคูณเหล่านี้คือ 23

ค้นหาผลรวมของทวีคูณทั้งหมดของ 3 หรือ 5 ด้านล่าง 1,000

ท้าทาย:

ป.ร. ให้ไว้เป็นจำนวนเต็มบวกNและชุดของจำนวนเต็มบวกอย่างน้อยหนึ่งAการส่งออกรวมของจำนวนเต็มบวกทั้งหมดน้อยกว่าที่มีหลายรายการอย่างน้อยหนึ่งสมาชิกของNA

ตัวอย่างเช่นสำหรับกรณี Project Euler อินพุตจะเป็น:

1000
3
5

กรณีทดสอบ:

Input : 50, [2]
Output: 600

Input : 10, [3, 5]
Output: 23

Input : 28, [4, 2]
Output: 182

Input : 19, [7, 5]
Output: 51

Input : 50, [2, 3, 5]
Output: 857

4
1) เรานับจำนวนที่ทวีคูณของทั้งสองครั้งหรือไม่? 2) เราจะได้รับเพียงตัวเลขสองตัวเท่านั้นหรือไม่ หรือจำนวนใดพูดหนึ่งหรือ 3?
ข้าวสาลีตัวช่วยสร้าง

3
คุณให้กรณีทดสอบได้ไหม? เห็นได้ชัดว่าไม่โพสต์คำตอบไปที่ PE หนึ่ง แต่สิ่งที่เกี่ยวกับตัวอย่างอื่น ๆ ?
Rɪᴋᴇʀ

1
@WheatWizard: คำว่า "หรือ" บอกเป็นนัยว่าแต่ละหมายเลขถูกนับเพียงครั้งเดียวอย่างมากที่สุด ฉันยอมรับว่าคำถามต้องทำให้ชัดเจนว่าต้องรองรับการสนับสนุน "หมายเลขเพื่อตรวจสอบข้อโต้แย้งหลายรายการ" สองอย่างแน่นอน? หนึ่งหรือมากกว่า? เป็นศูนย์หรือมากกว่านั้น?
smls

1
เราสามารถใช้ " ตัวเลขเท่ากับหรือต่ำกว่า 10 " หรือใช้ 9 เป็นอินพุตแทน 10 ได้หรือไม่
Stewie Griffin

"และชุดของเลขจำนวนเต็มบวก A อย่างน้อยหนึ่งชุด" ชุดใหญ่แค่ไหน?
betseg

คำตอบ:


13

เยลลี่ 6 ไบต์

ḍþṖḅTS

ลองออนไลน์!

มันทำงานอย่างไร

ḍþṖḅTS  Main link. Left argument: D (array). Right argument: n (integer)

ḍþ       Divisible table; test each k in [1, ..., n] for divisibility by all
        integers d in D.
  Ṗ     Pop; discard the last Boolean array, which corresponds to n.
   ḅ    Unbase; convert the Boolean arrays of base n to integer. This yields a 
        non-zero value (truthy) and and only if the corresponding integer k is 
        divisible by at least one d in D.
    T   Truth; yield the array of all indices of truthy elements.
     S  Compute their sum.

3
แน่นอน @Dennis ต้องมาพร้อมกับสิ่งที่จะทำให้คุณสงสัยว่าคุณกำลังทำอะไรกับ ppcg
Grajdeanu Alex

8

Python ขนาด59 55 ไบต์

lambda n,l:sum(v*any(v%m<1for m in l)for v in range(n))

repl.it

ฟังก์ชั่นที่ไม่มีชื่อการจำนวนเต็มและรายชื่อของจำนวนเต็มn lลัดเลาะช่วงของหมายเลขธรรมชาติ (บวกศูนย์) ขึ้นไป แต่ไม่รวมถึงnและผลรวม ( sum(...)) ผู้ที่มีส่วนที่เหลือหลังจากที่ส่วนหนึ่งของศูนย์ ( v%m<1) สำหรับanyของจำนวนเต็มในรายการm lใช้การคูณมากกว่าเงื่อนไขเพื่อบันทึก 3 ไบต์


8

คู่, 38 36 33 ไบต์

@(x,y)(1:--x)*~all(mod(1:x,y),1)'

รับอินพุตเป็น: f(10, [3;5]). นี่จะสั้นกว่า 2 ไบต์หากอินพุตอาจใช้f(9,[3;5])สำหรับกรณีทดสอบเดียวกัน

ตรวจสอบกรณีทดสอบทั้งหมดที่นี่


คำอธิบาย:

@(x,y)        % Anonymous function that takes two inputs, x and y
              % x is a scalar and y is a vertical vector with the set of numbers
(1:--x)*      % Pre-decrement x and create a vector 1 2 ... x-1    

อ็อกเทฟสามารถลดค่าล่วงหน้าได้ดังนั้นการใช้1:--xแทน1:x-1(สองครั้ง) จะบันทึกสองไบต์

mod(a,b)ให้สำหรับ1 2 0 1 2 0 1 2 0 mod(1:9,3)หากอาร์กิวเมนต์ที่สองเป็นเวกเตอร์แนวตั้งก็จะทำซ้ำอินพุตแรกในแนวตั้งและรับโมดูลัสสำหรับแต่ละค่าในอาร์กิวเมนต์ที่สอง ดังนั้นสำหรับการป้อนข้อมูลmod(1:9, [3;5])นี้จะช่วยให้:

1 2 0 1 2 0 1 2 0
1 2 3 4 0 1 2 3 4

การทำ~all(_,1)เช่นนี้จะทำให้trueคอลัมน์ที่มีค่าอย่างน้อยหนึ่งค่าเป็นศูนย์และfalseค่าทั้งหมดไม่ใช่ศูนย์:

~all(mod(1:x,y),1)
0 0 1 0 1 1 0 0 1

เป็นสิ่งจำเป็นในกรณีที่มีเพียงหนึ่งในจำนวน,1 yมิฉะนั้นมันจะทำหน้าที่กับเวกเตอร์ทั้งหมดแทนที่จะเป็นตัวเลขต่อจำนวน

การย้ายสิ่งนี้ไปยังเมทริกซ์แนวตั้งและใช้การคูณเมทริกซ์จะให้คำตอบที่ถูกต้องแก่เราโดยไม่จำเป็นต้องมีการสรุปอย่างชัดเจน:


โอ้ที่โหดร้าย: ผมต้องเพิ่ม 2 ไบต์เพราะความแตกต่างระหว่าง x และ x-1 แต่คุณมีการเพิ่ม 4 ไบต์และฉันตอนนี้ไปข้างหน้าโดย 1 ไบต์> :)
เกร็กมาร์ติน

6

JavaScript (ES6), 40 39 36 ไบต์

อินพุต: จำนวนเต็มnและอาร์เรย์ของจำนวนเต็มaพร้อมไวยากรณ์ currying(n)(a)

n=>F=a=>n--&&!a.every(v=>n%v)*n+F(a)

กรณีทดสอบ


f=(n,a)=>n--&&a.some(v=>n%v<1)*n+f(n,a)ผมมีสูตรที่แตกต่างกันเล็กน้อยสำหรับความยาวเดียวกัน: ดีที่สุดที่ฉันทำได้แบบไม่โต้ตอบคือ 61 ไบต์
Neil

@Neil ความคิดเห็นของคุณสนับสนุนให้ฉันมองหาสูตรอื่น ที่น่าสนใจคือรูปแบบ currying ช่วยประหยัด 3 ไบต์
Arnauld

5

MATL , 9 ไบต์

q:ti\~*us

ลองออนไลน์!


1
เพียงตรวจสอบว่าฉันอ่านถูกต้องแล้ว (โดยไม่ตรวจสอบเอกสาร) คุณกำลัง decrementing 1 2 ...สร้างเวกเตอร์ คุณทำซ้ำและใช้โมดูลัสอินพุตอื่น คุณลบล้างมันและคูณด้วยเวกเตอร์1 2 ..ใช้เฉพาะเพื่อกำจัดการซ้ำซ้อนและในที่สุดก็สรุป ...
Stewie Griffin

แน่นอน! ฉันอยู่ในมือถือดังนั้นฉันจึงไม่ได้รวมคำอธิบายไว้ ตอนนี้ไม่จำเป็น :-)
Luis Mendo


4

Python ขนาด 67 ไบต์

a,b,c=input()
x=y=0
exec("if x%c<1or 1>x%b:y+=x\nx+=1\n"*a)
print y

หลังจากเขียนสิ่งนี้ฉันสังเกตเห็นว่าโค้ดของฉันคล้ายกับคำตอบของงูหลามที่มีอยู่แล้ว


คุณไม่จำเป็นต้องใช้เครื่องหมายอัฒภาคใน exec เนื่องจากคุณมีตัวแบ่งบรรทัดหลังจากนั้น ฉันรู้ว่าคำตอบของฉันอาจจะโตขึ้น!
Theo

สเป็คบอกว่า "ชุดของจำนวนเต็มบวกอย่างน้อยหนึ่งค่า"; ดูเหมือนว่าจะจัดการกรณีที่ชุดนี้เป็นจำนวนเต็มสองตัวเท่านั้น นอกจากนี้ยังมีx=y=0ในบรรทัดที่แยกต่างหากจะบันทึกสี่ไบต์
Jonathan Allan

@Janathan ทุกคนเจ๋งขอบคุณมาก!
Rɪᴋᴇʀ

4

Mathematica, 37 27 ไบต์

ขอบคุณ Martin Ender สำหรับการสังเกตที่ชาญฉลาดซึ่งนำไปสู่การประหยัดไบต์ขนาดใหญ่!

Tr[Union@@Range[#,#2-1,#]]&

ฟังก์ชั่นที่ไม่มีชื่อใช้สองอาร์กิวเมนต์รายการ#ของจำนวนเต็ม (ตัวหารที่ต้องการA) และจำนวนเต็ม#2(ขอบเขตบนN) และส่งคืนจำนวนเต็ม Range[#,#2-1,#]ให้สำหรับแต่ละองค์ประกอบdของรายการ#ทวีคูณทั้งหมดของdน้อยกว่าหรือเท่ากับ#-1(จึงน้อยกว่า#); Trสหภาพของรายการเหล่านี้จะถูกคำนวณแล้วและสรุปด้วย

รุ่นก่อนหน้า:

Tr[x=#;Union@@(Range[#,x-1,#]&/@#2)]&

1
Rangeสามารถฟังได้: Tr[Union@@Range[#2,#-1,#2]]&(แล้วบันทึกอีกหนึ่งไบต์โดยสลับลำดับของอินพุต)
Martin Ender

4

Perl 6 , 25 ไบต์

{sum grep *%%@_.any,^$^a}

แลมบ์ดาที่รับหมายเลขอินพุตเป็นอาร์กิวเมนต์ (อาร์กิวเมนต์หนึ่งตัวสำหรับ N และจำนวนอาร์กิวเมนต์โดยพลการสำหรับ A)

( ลองออนไลน์ )

คำอธิบาย:

  • { ... }: แลมบ์ดา
  • $^a: อาร์กิวเมนต์แรกของแลมบ์ดา
  • @_: อาร์กิวเมนต์ที่เหลืออยู่ของ lambda ("พารามิเตอร์ variadic")
  • ^$^a: ช่วงจากไป0$^a - 1
  • * %% @_.any: แลมบ์ดาอีกซึ่งการทดสอบอาร์กิวเมนต์*ใช้หารโดยผู้ประกอบการ%%กับany- ชุมทาง@_ของรายการ
  • grep PREDICATE, RANGE: ทำซ้ำช่วงของตัวเลขและส่งกลับค่าที่เพรดิเคตเป็นจริง

ฉันคิดว่าการเพิ่ม^เพื่อประกาศพารามิเตอร์ตัวยึดค่อนข้างชัดเจน $aโดยเฉพาะอย่างยิ่งนับตั้งแต่ที่คุณสามารถใช้มันต่อไปในบล็อกเป็นเพียงแค่ ฉันคิดว่ามีเพียงการ$_ @_ %_ selfพิจารณาที่จะประกาศโดยปริยาย ฉันคิดว่าฉันน่าจะมีบรรทัดนั้นอ่าน " ประกาศพารามิเตอร์แรกเป็นตัวยึด "
Brad Gilbert b2gills

@ BradGilbertb2gills: ฉันหมายความว่ามันจะกลายเป็นส่วนหนึ่งของลายเซ็นแลมบ์ดาส่อถึงแม้ว่ารหัสไม่ได้แนะนำลายเซ็นต่อหน้าตัวแลมด้า @_และ%_ในกรณีของฟังก์ชั่นก็ไม่ต่างกันในเรื่องนั้น: มันกลายเป็นส่วนหนึ่งของลายเซ็นก็ต่อเมื่อปรากฏในร่างกาย เท่านั้น$_ (และselfและ%_ในวิธีการ) จะกลายเป็นส่วนหนึ่งของลายเซ็นโดยเริ่มต้น
smls

PS: ฉันลบวลี "ประกาศโดยปริยาย" ในขณะนี้เนื่องจากไม่จำเป็นต้องเข้าใจรหัส
smls

3

R, 67 ไบต์

a=scan();x=c();for(i in a[-1])x=c(x,seq(i,a[1]-1,i));sum(unique(x))

ใช้เวลาเวกเตอร์ STDIN [N, a_1, a_2, ...]ในรูปแบบต่อไปนี้: aรองรับจำนวนใด ๆ สำหรับแต่ละaสร้างลำดับaไปN-1ด้วย astepsize จากนั้นนำผลรวมของรายการที่ไม่ซ้ำทั้งหมดในเวกเตอร์นั้น


3

Haskell, 42 39 ไบต์

a!b=sum[x|x<-[1..a-1],any((<1).mod x)b]

การใช้งาน:

Main> 50![2,3,5]
857

ขอบคุณ @Zgarb เป็นเวลา 3 ไบต์


(x`mod`)mod xเป็นเช่นเดียวกับ
Zgarb

@Zgarb อ๊ะ :)
Angs

3

05AB1E , 9 ไบต์

FND²%P_*O

ลองออนไลน์!

F         For N in [0, ..., input[0]-1]
 ND²%     Evaluate N%input[1]; yields an array of results
     P    Take the total product of the array. Yields 0 only if at least one of the value is 0, in other words if N is multiple of at least one of the specified values
      _   Boolean negation, yields 1 if the last value is 0 and yields 0 otherwise
       *  Multiply by N: yields N if the last value is 0 and yields 0 otherwise
        O Display the total sum

8 ไบต์หรือ8 ไบต์ทางเลือกโดยใช้ตัวกรอง (8-byter แรกเป็นไปไม่ได้เมื่อคุณโพสต์คำตอบของคุณเนื่องจากà(สูงสุด) ปรากฏรายการตอนนี้ แต่ไม่ได้มาก่อน)
Kevin Cruijssen

3

คู่, 49 37 ไบต์

@(A,N)sum(unique((z=(1:N)'.*A)(z<N)))

ฟังก์ชั่นจะถูกเรียกว่าเป็น f([2 3 4],50)

สมมติว่าA=[2 3 4];เราต้องการให้มีจำนวนรวมเป็น

sum(
2,4,6...,50-1 ,
3,6,9...,50-1,
4,8,12,...50-1)

เราสามารถคูณ[2 3 4]ด้วย1:50การหาเมทริกซ์(1:N)'.*A

[2 4 6 ... 2*50
3 6 9 ... 3*50
4 8 12 ...4*50]

จากนั้นแยกจากเมทริกซ์ที่น้อยกว่า 50: z(z<N)

เนื่องจากมีองค์ประกอบที่ซ้ำกันในเมทริกซ์เราจึงแยกค่าที่ไม่ซ้ำกันและรวมพวกมัน

คำตอบก่อนหน้า : (โซลูชันนี้จะล้มเหลวหาก N == 1)

@(A,N)sum((k=uint64(1:N-1))(any(k==(k./A').*A')))

ฟังก์ชั่นควรจะเรียกว่าเป็น f(unit64([2 3 4]),uint64(50))


1
ดีมาก! เกือบจะเหมือนกับคำตอบระดับแปดเสียงอื่น ๆ แต่เป็นวิธีที่แตกต่างอย่างสิ้นเชิง นี่ไม่ได้ข้ามความคิดของฉันเลย! จะได้ประโยชน์จากการมีคำอธิบายแม้ว่าและอาจจะเชื่อมโยงไปยัง ideone แต่คุณมีคะแนนของฉันแล้ว :-)
Stewie Griffin

ฉันเปลี่ยนลำดับการป้อนข้อมูล แต่นี่คือลิงค์ideone.com/8Bljrl
Stewie Griffin

2

Pyth, 10 ไบต์

s{sm:0hQdt

คำอธิบาย

s{sm:0hQdtQ   Implicit input
    :0hQd     Get multiples of d below the bound
   m     tQ   ... for each d given
  s           Concatenate results
 {            Remove repeats
s             Take the sum

2

T-SQL, 87 ไบต์

สิ่งนี้จะทำงานได้ตราบใดที่@iมีค่า 2048 หรือต่ำกว่า

USE master--needed for databases not using master as default
DECLARE @i INT=50
DECLARE @ table(a int)
INSERT @ values(2),(3),(5)

SELECT sum(distinct number)FROM spt_values,@ WHERE number%a=0and abs(number)<@i

ลองดู


2

APL (Dyalog Unicode)ขนาด 12 ไบต์

+/⊢∘⍳∩∘∊×∘⍳¨

ลองออนไลน์!

ฟังก์ชั่นเงียบโดยไม่ระบุชื่อ ขอบคุณ @ Adámที่ช่วยฉันกำจัดสิ่งนี้ทิ้งไป 3 ไบต์ ⎕IO←0การใช้ประโยชน์

วิธี:

+/⊢∘⍳∩∘∊×∘⍳¨  Tacit function. Left and right arguments will be called  and  respectively.

        ×∘⍳¨  Multiply  with each element of [0..⍵-1]
             Enlist (flattens the vector)
     ∩∘       Then, get the intersection of that vector with
  ⊢∘⍳         The vector [0..⍵-1].
+/            Then sum

2

Pip , 43 41 39 35 bytes

b^:sFc,a{f:0Fdb{f?0c%d?0(f:i+:c)}}i

ลองออนไลน์!

คำอธิบาย:

Takes inputs like so:

    arg1 1000
    arg2 3 5

b^:s                      ;read rest of inputs as array
                          ;(s is " " and ^ is split into array on char)
F c ,a{                   ;for(c in range(0,a))
  f:0                     ;flag to prevent double counting 15,30,etc.
  F d b {                 ;forEach(d in b)
    f? 0 c%d? 0 (f:i+:c)  ;if flag {continue}elif c%d {f=i+=c}
                          ;      (i will always be truthy so why not)     
  }
}
i                         ;print sum

ขออภัย! ฉันอ่านเร็วเกินไป
เคนเน็ ธ เทย์เลอร์

ดีกว่ามาก คำตอบที่ดี!
mbomb007

1

Python 2, 80 ไบต์

อันนี้ยาวมาก สามารถทำให้สั้นลงได้อย่างแน่นอน การใช้ตัวเลขทั้งสามเป็นอินพุตแยกต่างหากทำให้คะแนนลดลงอย่างแน่นอน

i=input
x=i();y=i();z=i();s=c=0
exec("if c%z<1 or c%y<1:s+=c\nc+=1\n"*x)
print s

คุณสามารถทำและให้การป้อนข้อมูลในรูปแบบของx,y,z=input() (1000,3,5)
Skyler

1

เสียงกระเพื่อมสามัญ 77

(lambda(n x)(loop for i below n when(some(lambda(u)(zerop(mod i u)))x)sum i))

Ungolfed

(lambda (limit seeds)
  (loop for i below limit
        when (some (lambda (u) (zerop (mod i u))) seeds)
          sum i))

1

PowerShell , 57 ไบต์

param($a,$b)(1..--$a|?{$i=$_;$b|?{!($i%$_)}})-join'+'|iex

ลองออนไลน์!

โซลูชั่นซ้ำ จะเข้าเป็นตัวเลข$aและเป็น $barray วนซ้ำจาก1ด้านล่างหนึ่ง$aผ่าน (ผ่าน--$a) โดยใช้Where-Objectโอเปอเรเตอร์ที่|?{...}มีส่วนคำสั่งเพื่อเลือกหมายเลขที่แน่นอน

ชุดข้อ$iจะเป็นหมายเลขปัจจุบันก่อนที่จะส่งเข้าแถว$bไปยังอีก|?{...}ที่นี่เลือกออกรายการเหล่านั้นที่หมายเลขปัจจุบันจะแบ่งเท่า ๆ $bกันอย่างน้อยหนึ่งในตัวเลขใน องค์ประกอบเหล่านั้นของการ$bแบ่งเท่า ๆ กันจะถูกทิ้งไว้ในท่อ

ดังนั้นหากมีองค์ประกอบอย่างน้อยหนึ่งจาก$bท่อมีองค์ประกอบดังนั้นด้านนอกWhereเป็น$trueและหมายเลขปัจจุบันเหลืออยู่ในท่อ มิฉะนั้นไม่มีอิลิเมนต์จาก$bบนไพพ์ไลน์ด้านนอกWhereคือ$falseดังนั้นหมายเลขปัจจุบันจะไม่ถูกวางบนไพพ์ไลน์

ตัวเลขเหล่านั้นทั้งหมดมารวมกันเป็น parens, -joined พร้อมกับ+เครื่องหมาย, และ piped to |iex(ย่อมาจากInvoke-Expressionและคล้ายกับeval) ผลลัพธ์การรวมจะถูกทิ้งไว้บนไพพ์ไลน์และเอาท์พุทนั้นเป็นนัย


1

PHP, 78 76 74 ไบต์

for(;++$i<$argv[$f=$k=1];$s+=$i*!$f)for(;$v=$argv[++$k];)$f*=$i%$v;echo$s;

ห่วงนอกวิ่ง$iจาก 1 ถึงด้านล่างอาร์กิวเมนต์แรกและเพิ่ม$iไป$sถ้า$fจะไม่ได้ตั้งค่า
วนรอบภายในทวีคูณ$fด้วย ( $iอาร์กิวเมนต์โมดูโล) สำหรับอาร์กิวเมนต์ที่ตามมาทั้งหมดตั้งค่า$fเป็น0ถ้า$iเป็นทวีคูณของหนึ่งในนั้น

-rทำงานด้วย


1

สกาลา, 47 ไบต์

n=>1.to(n(0)-1).filter(i=>n.exists(i%_==0)).sum

n คือรายการที่มีอาร์กิวเมนต์แรกNส่วนที่เหลือเป็นองค์ประกอบของA

ทำงานโดยการกรองตัวเลขที่ไม่มี A อย่างน้อยหนึ่งตัวที่ i เป็นผลคูณแล้วรวม การพูดอย่างเคร่งครัดเราควรใช้n.tail.existsภายในการปิด แต่เนื่องจากฉันมีค่าน้อยกว่า N เสมอและดังนั้นจึงไม่เคยมี N หลายค่าเลยวิธีแก้ปัญหาก็ยังสมบูรณ์อยู่หากไม่มีสิ่งนี้


1

Java 8, 75 ไบต์

(N,A)->IntStream.range(1,N).filter(x->A.stream().anyMatch(y->x%y==0)).sum()

ลายเซ็นวิธีการนี้คือ int f(int N, List<Integer> A)



1

C11, 177 ไบต์

#include"object.h"
#define S size_t
S g(S m,array_t*d){S s,i,l,j;for(s=i=0;i<m;i++){for(l=1,j=0;j<d->idx+1;l*=i%(S)(*array_get_ref(d,j++,NULL))->fwi->value);s+=l?0:i;}return s;}

ต้องใช้ชุดของส่วนหัวนี้ในโฟลเดอร์เดียวกันและfnv-hashห้องสมุดก็พบว่ามีเช่นกัน รวบรวมเหมือนgcc 1.c ../fnv-hash/libfnv.a -o 1 -DNODEBUG

โปรแกรมทดสอบ:

#include "../calc/object/object.h"
#include <stdio.h>

size_t f (const size_t max, const size_t a, const size_t b);
size_t f2 (const size_t max, const array_t* const divs);
size_t g (size_t max, array_t* divs);

define_array_new_fromctype(size_t);

int main(void) {
  printf("%zu\n", f(10, 3, 5));
  static const size_t a[] = {
    3, 5
  };
  array_t* b = array_new_from_size_t_lit(a, 2, t_realuint);
  printf("%zu\n", f2(10, b));
  printf("%zu\n", g(10, b));
  array_destruct(b);
  return 0;
}

size_t f (const size_t max, const size_t a, const size_t b) {
  size_t sum = 0;
  for (size_t i = 0; i < max; i++) {
    sum += (i % a * i % b) ? 0 : i;
  }
  return sum;
}

size_t f2 (const size_t max, const array_t* const divs) {
  size_t sum = 0;
  const size_t len = array_length(divs);

  for (size_t i = 0; i < max; i++) {
    size_t mul = 1;
    for (size_t j = 0; j < len; j++) {
      object_t** this = array_get_ref(divs, j, NULL);

      fixwid_t*   num = (*this)->fwi;

      mul *= i % (size_t) num->value;
    }
    sum += mul ? 0 : i;
  }
  return sum;
}

#define S size_t
S g(S m,array_t*d){S s,i,l,j;for(s=i=0;i<m;i++){for(l=1,j=0;j<d->idx+1;l*=i%(S)(*array_get_ref(d,j++,NULL))->fwi->value);s+=l?0:i;}return s;}

เอาท์พุท

23
23
23


1

Whispers v2 , 178 ไบต์

> Input
> Input
> ℕ
>> (1)
>> ∤L
>> {L}
>> L∩2
>> #L
>> L∈3
>> L⋅R
>> Each 5 4
>> Each 6 11
>> Each 7 12
>> Each 8 13
>> Each 9 14
>> Each 10 15 4
>> ∑16
>> Output 17

ลองออนไลน์!

ต้นไม้โครงสร้าง:

ต้นไม้ struct

มันทำงานอย่างไร

EachLα

f(x)={i|(i|x),iN}i.e. the set of divisors ofxg(x)=f(x)αi.e. the union of the divisors ofxwithαh(x)=|g(x)|>0i.e.g(x)is not empty

αβ

βi={αih(αi)0h(αi)

αiiαββ0


1

K (oK) , 15 14 ไบต์

วิธีการแก้:

{+/&|/~y!\:!x}

ลองออนไลน์!

ตัวอย่าง:

{+/&|/~y!\:!x}[50;,2]
600
{+/&|/~y!\:!x}[10;3 5]
23

คำอธิบาย:

{+/&|/~y!\:!x} / the solution
{            } / lambda taking implicit x and y
           !x  / range 0..x-1
       y!\:    / modulo (!) x with each-left (\:) item in y
      ~        / not
    |/         / min-over to flatten into single list
   &           / indices where true
 +/            / sum up


0

กำลังประมวลผล 88 ไบต์

int q(int a,int[]b){int s=0,i=0;for(;++i<a;)for(int j:b)if(i%j<1){s+=i;break;}return s;}

ใช้วิธีการแบบforลูปแบบง่าย ๆรวมผลคูณทั้งหมดและส่งคืน การป้อนข้อมูลเป็นรูปแบบint, int[]อาร์เรย์

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.