R - 素因子分解

时间:2018-04-23 06:22:55

标签: r

你能帮助我练习一下这个练习吗?我对数学算法知之甚少,对R语言的了解甚少。谢谢。

程序从用户读取整数。如果用户输入的值小于2,则程序应显示错误。否则,程序应显示可以相乘的素数以计算n,每行出现一个因子。例如:

The prime factors of 72 are: 2, 2, 2, 3, 3

我在C中有这个代码来计算素数

#include <stdio.h>

int main()
{
int i, j, num, isPrime;

/* Input a number from user */
printf("Enter any number to print Prime factors: ");
scanf("%d", &num);

printf("All Prime Factors of %d are: \n", num);

/* Find all Prime factors */
for(i=2; i<=num; i++)
{
    /* Check 'i' for factor of num */
    if(num%i==0)
    {
        /* Check 'i' for Prime */
        isPrime = 1;
        for(j=2; j<=i/2; j++)
        {
            if(i%j==0)
            {
                isPrime = 0;
                break;
            }
        }

        /* If 'i' is Prime number and factor of num */
        if(isPrime==1)
        {
            printf("%d, ", i);
        }
    }
}

return 0;
}

但输出只是这个

All Prime Factors of 72 are: 2, 3

而不是:

2, 2, 2, 3, 3

我也不知道如何将其翻译成R.

3 个答案:

答案 0 :(得分:1)

fun=function(x){
  n=c()
  i=2
  r=x
  while(prod(n)!=x){
    if(!r%%i) {n=c(n,i);r=r/i;i=1}
    i=i+1
  }
  n
}

fun(72)
[1] 2 2 2 3 3

答案 1 :(得分:0)

这是我写回来的时间,但可能需要一些改进。根据您的要求更新。

get_prime_factors <- function() {
  num <- as.numeric(readline(prompt="Enter number: " ))
  n <- num
  if (n > 2) {
    numvec <- numeric()
    while(n %% 2 == 0){
      numvec = c(numvec, 2)
      n = n/2
     }
  i = 3
  while(n != 1) {
    while(n %% i == 0) {
      numvec = c(numvec, i)
      n = n/i
    }
    i = i + 2
  }
sprintf("All Prime Factors of %d are:%s", num, paste0(sort(numvec), collapse = ","))
}
else {
  stop("Try a bigger number")
  }
}

使用少量示例运行:

get_prime_factors()
Enter number: 100
#[1] "All Prime Factors of 100 are : 2,2,5,5"

get_prime_factors()
Enter number: 72
#[1] "All Prime Factors of 72 are : 2,2,2,3,3"

get_prime_factors()
Enter number: -9
  

get_prime_factors()中的错误:尝试更大的数字

答案 2 :(得分:0)

使用软件包

首先,在计算机上安装CRAN软件包numbers

install.packages("numbers")

现在,在您的R会话中加载程序包并获取主要因素。

library(numbers)
primeFactors(600851475143)