你能帮助我练习一下这个练习吗?我对数学算法知之甚少,对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.
答案 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)