有人可以帮助我找到一种方法来获得Prolog中的反因子...
例如inverse_factorial(6,X) ===> X = 3.
我一直在努力工作.
我目前有阶乘,但我必须让它可逆.请帮我.
#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) 我无法理解以下因子程序
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中,最后一行是在递归调用之前执行的吗?
我正在研究一个程序,我有一个函数可以交换用户输入的长度数组中的位置.但是,我想弄清楚如何打印出这个函数调用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中编写一个循环,这将打印出来!次?
如何将这两个函数组合到一个递归函数中以获得此结果:
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) 我遇到了一个问题,我需要计算非常大的因子的值.我用两种不同的方式在C++中解决了这个问题,但只想知道我的复杂性分析是否准确.
在任何一种方法中,我将非常大的数字表示为v[0]表示最低有效数字的向量,而最后一个索引处的值表示最高有效数字.版本1的代码可以在这个要点中找到.
鉴于上面的代码,它似乎multiplyVectorByInteger()是O(log(n*k))其中n在给定的整数,并且k是由向量表示的数目.我的逻辑是,我们将做一些与结果数的长度成比例的步骤n*k,以产生一个向量表示n*k.长度n*k是O(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!))在每个级别执行步骤.总结如下:

我从第二次总结跳到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
我在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) 我正在处理来自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.
我知道我可以轻松地从其他提交中复制和粘贴,但我想知道为什么我的方法不会产生正确的输出.
以下是整个方法: …
我有python 3.7.1和scipy版本:1.3.0。调用auto_arima时出现错误:“无法从'scipy.misc'导入名称'factorial'”
只是这个基本的导入会引起问题:-
“ from pmdarima.arima import auto_arima”
我尝试重新安装scipy,但是没有用
factorial ×10
algorithm ×2
prolog ×2
python ×2
recursion ×2
arrays ×1
biginteger ×1
bignum ×1
c ×1
c# ×1
c++ ×1
clpfd ×1
for-loop ×1
java ×1
javascript ×1
math ×1
permutation ×1
python-3.7 ×1
rust ×1
scipy ×1