Tìm số lượng các chữ số x có tích các chữ số là N


8

Cho hai số N và x, tìm số lượng các chữ số x có tích các chữ số là N

limits: N(<10^6) and x(<12)

Sample Input:
8 3
Sample Output:
10

bước sóng ngắn nhất hoặc thời gian chạy ngắn nhất? Có vẻ như điều này, thời gian chạy ngắn nhất với bước sóng? <1000 (giả sử) sẽ là một mục tiêu có ý nghĩa hơn.
smci

Tôi không hiểu: 2 chữ số x và N, x = 8, N = 3 có nghĩa là 8 chữ số trong đó sản phẩm là 3. Vì 3 là số nguyên tố, nên chỉ có thể là 3111 ... 1, 1311 ... 1, 113 ... - 8 khả năng. Tôi đang thiếu gì?
người dùng không xác định

@userunknown Đó là cách khác: ba chữ số trong đó sản phẩm là tám. (222, 811, 181, 118 và sáu cách để sắp xếp 1,2,4, tôi tin thế.)
hộp bánh mì

@breadbox: Trong khi đó tôi đã nhận ra điều đó, nhưng phần mô tả nên được sửa. Nếu tôi đưa ra hai số N và x, không nên khẳng định rằng tôi đã cho hai số x và N (cũng là thứ tự trong tiêu đề).
người dùng không xác định

Câu trả lời:


3

Python chars 208

def dec(num, num_dig):
    if num_dig==0:
        return int(num==1)
    else:
        return sum(dec(num/i, num_dig-1) for i in range(1,10) if num/i*i==num)

if __name__ == "__main__":    
    print dec(8,3)

3

Golf 42 31

~10\?.10/\,>{10base{*}*1$=},,\;

Input: Mong đợi các số Nxlàm đối số dòng lệnh (cách nhau bởi khoảng trắng).

Chương trình có thể được thử nghiệm ở đây .


Tôi đã thử nghiệm và có một Code took longer than 5 seconds to run, so it was aborted.với các thông số đảo ngược. :)
người dùng không xác định

@userunknown Bạn nói đúng. Mã này rất không hiệu quả khi xvượt lên trên 4. Ví dụ: nếu tôi chạy nó trên máy của mình với các tham số 3 5tôi nhận được kết quả sau hơn 30 giây. Vì vậy, 3 8tôi đoán đó có thể là vài giờ ...
Cristian Lupascu

Tôi chưa bao giờ nhìn vào Golfscript-thingy này. Có phải hầu như luôn luôn là chậm?
người dùng không xác định

@userunknown Mục đích của Golfscript không phải là tốc độ và nó được biết là hơi chậm. Tuy nhiên, trong trường hợp này, thuật toán đó rất kém hiệu quả. Nhưng mã này ngắn :)
Cristian Lupascu

1
@userunknown, GolfScript được diễn giải bằng Ruby. Ngoài ra, tất cả các giá trị là bất biến, vì vậy có rất nhiều bản sao liên quan. Nó không có xu hướng nhanh và thường có thể thêm một hoặc hai trong số n vào thời gian chạy không có triệu chứng của các thuật toán thường được phân tích trong mô hình RAM.
Peter Taylor

2

Brachylog (2), 13 byte, thách thức postdates ngôn ngữ

{h.&t~lℕẹ≜×}ᶜ

Hãy thử trực tuyến!

Giải trình

{h.&t~lℕẹ≜×}ᶜ
{          }ᶜ   Count the number of
         ≜      values at this point
   &t           formed via taking the last element of the input,
       ℕ        generating an integer
     ~l         of that length,
        ẹ       and splitting it into digits
          ×     such that the product of those digits
 h.             is the first element of {the input}

Một mẹo chơi golf gọn gàng được sử dụng ở đây là không giống như hầu hết tất cả các phép ẩn dụ, hoàn toàn không quan tâm đến giá trị thực tế .(thường được sử dụng để xây dựng một đầu ra cho các phép ẩn dụ); như vậy, .có thể được sử dụng như bất kỳ biến nào khác (lưu một byte vì nó xuất hiện ngầm trước đó }). Không có nhãn hiệu ngầm ở bất cứ đâu ở đây, vì vậy tôi đã phải thêm một nhãn hiệu rõ ràng bằng cách sử dụng để đưa ra một cái gì đó để đếm.


1

Scala 107:

def f(N:Int,x:Int,s:Int=1):Int=if(s==N&&x==0)1 else
if(s>N||x==0)0 else
((1 to 9).map(i=>f(N,x-1,s*i))).sum

phiên bản vô văn hóa, gỡ rối:

def findProduct (N: Int, sofar: Int, togo:Int, collected:String=""):Int={
  if (sofar == N && togo == 0) {
    println (collected)
    1
  } else
  if (sofar > N || togo == 0) 0 else 
  (1 to 9).map (x=> findProduct (N, sofar*x, togo-1, collected + " " + x)).sum
}

Yêu cầu với đầu ra gỡ lỗi:

scala> findProduct (3, 1, 8)
 1 1 1 1 1 1 1 3
 1 1 1 1 1 1 3 1
 1 1 1 1 1 3 1 1
 1 1 1 1 3 1 1 1
 1 1 1 3 1 1 1 1
 1 1 3 1 1 1 1 1
 1 3 1 1 1 1 1 1
 3 1 1 1 1 1 1 1
res175: Int = 8

scala> findProduct (8, 1, 3)
 1 1 8
 1 2 4
 1 4 2
 1 8 1
 2 1 4
 2 2 2
 2 4 1
 4 1 2
 4 2 1
 8 1 1
res176: Int = 10

Tôi đã thử nó trên Simplyscala.com và nó thực sự nhanh. +1 cho hiệu suất.
Cristian Lupascu

0

Python (vẫn đang làm việc với nó) 164

from itertools import *
N,x=map(int,raw_input().split())
print len([c for c in product([d for d in range(1,10)if N%d==0],repeat=x) if reduce(lambda x,y:x*y,c)==N])

0

C # 128

int Z(int n,int x){var i=(int)Math.Pow(10,x-1);return Enumerable.Range(i,i*9).Count(j=>(j+"").Aggregate(1,(a,c)=>a*(c-48))==n);}

Phương thức C # này trả về số lượng các xchữ số có tích của các chữ số n. Nó yêu cầu không gian tên SystemSystem.Linqđược nhập trong bối cảnh hiện tại.

Phiên bản trực tuyến: http://ideone.com/0krup


0

Haskell 117 ký tự

import Data.Char
main = print $ f 3 8
f n t = length[x|x<-[10^(n-1)..(10^n-1)],foldr(*)1(map digitToInt $ show x)==t]

0

K, 49

{+/x=*/'"I"$''${x@&~x in y}.!:'"i"$10 xexp y,y-1}

.

k){+/x=*/'"I"$''${x@&~x in y}.!:'"i"$10 xexp y,y-1}[8;3]
10

0

J, 40 byte

[:+/[=[:*/"1(10#~])#:(10^<:@])}.[:i.10^]

Tạo tất cả các xsố có chữ số, chuyển đổi từng số thành cơ sở 10, sau đó tìm sản phẩm của từng số và kiểm tra xem mỗi số có bằng với bên trái không, sau đó tìm tổng của mỗi boolean.


0

Jelly , 12 byte, thách thức ngôn ngữ

,’⁵*r/ḊDP€ċƓ

Hãy thử trực tuyến!

Lấy x làm đối số dòng lệnh và N trên đầu vào tiêu chuẩn.

Giải trình

,’⁵*r/ḊDP€ċƓ
,             On {the input} and
 ’            {the input} minus 1
  ⁵*          take 10 to the power of each of those numbers
    r/        then form a range between them
      Ḋ       without its first element;
       D      treat each element as a list of digits,
        P€    take the product of each of those digit lists,
          ċ   then count the number of times
           Ɠ  the value from standard input appears

Phần cứng là tạo danh sách các số có x chữ số; số thấp nhất như vậy là 10 x 1 , cao nhất là 10 x 1. Phạm vi ở đây được tạo thông qua lần đầu tiên tạo cặp ( x , x 1), sau đó lấy 10 cho sức mạnh của cả hai, sau đó tạo phạm vi giữa chúng. Phạm vi bao gồm cả hai điểm cuối theo mặc định; chỉ trong trường hợp N xảy ra là 0, chúng ta cần xóa đầu cuối của phạm vi (xuất hiện trước vì đó là phạm vi "ngược") .

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.