标签: factorial

Prolog中的反因子

有人可以帮助我找到一种方法来获得Prolog中的反因子...

例如inverse_factorial(6,X) ===> X = 3.

我一直在努力工作.

我目前有阶乘,但我必须让它可逆.请帮我.

prolog factorial clpfd

12
推荐指数
2
解决办法
929
查看次数

C中10000因子

#include <stdlib.h>
#include <stdio.h>

struct node;
typedef struct node* PtrToNode;

struct node {
  long long n;
  PtrToNode next;
};

PtrToNode factorial(int n, PtrToNode init);
void multiply(long long n, PtrToNode init, long long carry);

int main() {
  int n;
  while (1) {
    scanf("%d", &n);
    if (n > 0) {
      break;
    } else if (n == 0){
      printf("1\n");
      return 0;
    } else {
      printf("Retry.\n");
    }
  }
  PtrToNode init = malloc(sizeof(struct node));
  init->n = 1;
  init->next = NULL;
  PtrToNode head = factorial(n, init); …
Run Code Online (Sandbox Code Playgroud)

c factorial

12
推荐指数
1
解决办法
1232
查看次数

Prolog阶乘递归

我无法理解以下因子程序

fact1(0,Result) :-
    Result is 1.
fact1(N,Result) :-
    N > 0,
    N1 is N-1,
    fact1(N1,Result1),
    Result is Result1*N.
Run Code Online (Sandbox Code Playgroud)

什么时候fact1被称为嵌套在第二行fact1,这是不是意味着最后一行,Result is Result1*N.永远不会被调用?或者在Prolog中,最后一行是在递归调用之前执行的吗?

recursion prolog factorial

11
推荐指数
4
解决办法
4万
查看次数

打印出阵列的所有排列

我正在研究一个程序,我有一个函数可以交换用户输入的长度数组中的位置.但是,我想弄清楚如何打印出这个函数调用N!times,列出函数中的所有排列.

我的置换函数代码是:

static void nextPerm(int[] A){
    for( int i = (n-1); i > 0; i-- ){
        if( A[i] < A[i+1] ){
            A[i] = pivot;
            continue;
        }
        if( A[i] >= A[i+1] ){
            reverseArray(A);
            return;
        }
    }

    for( int i = n; i > 0; i--){
        if( A[i] > pivot ){
            A[i] = successor;
            continue;
        }
    }

    Swap(pivot, successor);

    int[] B = new int[pivot+1];
    reverseArray(B);

    return;
}
Run Code Online (Sandbox Code Playgroud)

我应该在函数main中编写一个循环,这将打印出来!次?

java arrays algorithm permutation factorial

11
推荐指数
2
解决办法
4万
查看次数

递归因子函数

如何将这两个函数组合到一个递归函数中以获得此结果:

factorial(6)
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120
6! = 720
Run Code Online (Sandbox Code Playgroud)

这些是代码

def factorial( n ):
   if n <1:   # base case
       return 1
   else:
       return n * factorial( n - 1 )  # recursive call
def fact(n):
       for i in range(1, n+1 ):
               print "%2d! = %d" % ( i, factorial( i ) )

fact(6)
1! = 1
2! = 2
3! = 6
4! = 24
5! = 120 …
Run Code Online (Sandbox Code Playgroud)

python recursion factorial

10
推荐指数
4
解决办法
7万
查看次数

计算大因子时间复杂度

我遇到了一个问题,我需要计算非常大的因子的值.我用两种不同的方式在C++中解决了这个问题,但只想知道我的复杂性分析是否准确.

在任何一种方法中,我将非常大的数字表示为v[0]表示最低有效数字的向量,而最后一个索引处的值表示最高有效数字.版本1的代码可以在这个要点中找到.

鉴于上面的代码,它似乎multiplyVectorByInteger()O(log(n*k))其中n在给定的整数,并且k是由向量表示的数目.我的逻辑是,我们将做一些与结果数的长度成比例的步骤n*k,以产生一个向量表示n*k.长度n*kO(log(n*k))一些步骤将在for循环中执行,其他步骤将在while循环中执行.

在这个程序中找到大的阶乘,每当我们调用时multiplyVectorByInteger()我们都会传入一个整数n和向量表示(n-1)!.这意味着如果我们想要查找6!,我们传入整数6和向量表示5!.该函数将返回矢量表示6!.使用以前的信息我相信我可以说复杂性是O(log(i!))我传递整数的地方.为了找到大的阶乘,我们必须调用此方法O(n)次,其中n是我们正在努力寻找阶乘.我们积累的逻辑将如下所示:

1!       = 1!
1!*2     = 2!
2!*3     = 3!
3!*4     = 4!
...
(n-1)!*n = n!
Run Code Online (Sandbox Code Playgroud)

因为在我们计算的每个级别i!,我们因此O(log(i!))在每个级别执行步骤.总结如下:

SUM1

我从第二次总结跳到Big-Oh表示法的逻辑如下......打破这个我们得到以下结果:

1log(1) + 2log(2) + 3log(3) + ... + nlog(n)
Run Code Online (Sandbox Code Playgroud)

很明显我们得到的O(n^2)条款log(1) + …

c++ algorithm factorial time-complexity asymptotic-complexity

10
推荐指数
1
解决办法
1132
查看次数

递归函数计算因子导致堆栈溢出

我在Rust中尝试了一个递归因子算法.我使用这个版本的编译器:

rustc 1.12.0 (3191fbae9 2016-09-23)
cargo 0.13.0-nightly (109cb7c 2016-08-19)
Run Code Online (Sandbox Code Playgroud)

码:

extern crate num_bigint;
extern crate num_traits;

use num_bigint::{BigUint, ToBigUint};
use num_traits::One;

fn factorial(num: u64) -> BigUint {
    let current: BigUint = num.to_biguint().unwrap();
    if num <= 1 {
        return One::one();
    }
    return current * factorial(num - 1);
}

fn main() {
    let num: u64 = 100000;
    println!("Factorial {}! = {}", num, factorial(num))
}
Run Code Online (Sandbox Code Playgroud)

我收到了这个错误:

$ cargo run

thread 'main' has overflowed its stack
fatal runtime error: stack overflow
error: Process didn't …
Run Code Online (Sandbox Code Playgroud)

biginteger bignum factorial rust

10
推荐指数
3
解决办法
6032
查看次数

如何创建一个函数来计算带小数的数字的阶乘?

如何在JavaScript 中创建计算十进制数的阶乘(或伽玛函数)的函数?例如,我该如何计算2.33!

javascript math factorial gamma-function

9
推荐指数
2
解决办法
3202
查看次数

for循环中N个数的因子

我正在处理来自CodeChef的问题,我需要计算n个数字的阶乘.

用户输入一个数字,该数字确定执行因子计算的总数,然后输入要计算的数字.

我的问题在于乘法本身.例如,如果我有一个int == 5那么结果将是20(它将仅由最后一个因子计算n,而不是全部计算n)

这是存在问题的地方:

for(int x = 0; x < _numbersToProcess.Length; x++) {// Loop throuigh Array by index
    for (int y = 1; y < _numbersToProcess[x]; y++) {// Y is equal to less than index x
         _result[x] = _numbersToProcess[x] * y;// Multiply x by y then add to array
    }
}
Run Code Online (Sandbox Code Playgroud)

外循环定义要执行的计算数.

内循环通过迭代每个索引_numberToProcess并将其乘以小于要计算的数的每个数来来计算阶乘.

问题是因子计算会覆盖自身,

例如:

阶乘5的结果:20但它应该是120(它会覆盖自己,直到到达最后一个乘数)

所以我尝试了以下方法:

_result[x] = _numbersToProcess[x] *= y;
Run Code Online (Sandbox Code Playgroud)

这显然是一样的 _numbersToProcess[x] = _numbersToProcess[x] * y;

但这给出了一个完全不同的结果:

如果我们再次输入5,那么这将导致输出-1899959296.

我知道我可以轻松地从其他提交中复制和粘贴,但我想知道为什么我的方法不会产生正确的输出.

以下是整个方法: …

c# for-loop console-application factorial

9
推荐指数
1
解决办法
1195
查看次数

从pmdarima导入auto_arima时:错误:无法从'scipy.misc'导入名称'factorial'

我有python 3.7.1和scipy版本:1.3.0。调用auto_arima时出现错误:“无法从'scipy.misc'导入名称'factorial'”

只是这个基本的导入会引起问题:-
“ from pmdarima.arima import auto_arima”
我尝试重新安装scipy,但是没有用

python factorial scipy python-3.7

9
推荐指数
1
解决办法
2252
查看次数