C 求整数的素因子和的函数
我不能满足一个数的素因子的所有条件,以便找到正确的和C 求整数的素因子和的函数,c,function,prime-factoring,C,Function,Prime Factoring,我不能满足一个数的素因子的所有条件,以便找到正确的和 int sumPrime(number){ int counter; int sum=0; for(counter=2;counter<=(number/2);counter++){ if(number%counter==0){ sum=counter; counter++;
int sumPrime(number){
int counter;
int sum=0;
for(counter=2;counter<=(number/2);counter++){
if(number%counter==0){
sum=counter;
counter++;
sum+=counter;
}
return sum;
}
}
int-sumPrime(数字){
整数计数器;
整数和=0;
对于(counter=2;counter我认为代码是不言自明的。它适用于number>=2
int sumPrime(int number){
int factor = 2;
int sum=0;
while(1 != number){ //Repeat the loop till number becomes 1.
if(number%factor==0){ //Check if factor divides the number.
number /= factor; //If yes, update the number.
sum+=factor; //Add factor to sum.
printf("Factor [%d]\n", factor);
continue;
}
factor++; //If the current number is not a factor, check the next number.
}
printf("Sum [%d]\n", sum);
return sum;
}
12年的产出:
Factor [2]
Factor [2]
Factor [3]
Sum [7]
我认为代码是不言自明的。它适用于number>=2
int sumPrime(int number){
int factor = 2;
int sum=0;
while(1 != number){ //Repeat the loop till number becomes 1.
if(number%factor==0){ //Check if factor divides the number.
number /= factor; //If yes, update the number.
sum+=factor; //Add factor to sum.
printf("Factor [%d]\n", factor);
continue;
}
factor++; //If the current number is not a factor, check the next number.
}
printf("Sum [%d]\n", sum);
return sum;
}
12年的产出:
Factor [2]
Factor [2]
Factor [3]
Sum [7]
#包括
int main(){
printf(“总和为%i”,总和(12));
返回0;
}
int sumCount(int编号){
整数计数,和=0;
对于(计数=2;计数#包括
int main(){
printf(“总和为%i”,总和(12));
返回0;
}
int sumCount(int编号){
整数计数,和=0;
for(count=2;count寻找素因子的有效算法
代码:
#include <stdio.h>
#include <math.h>
int sumPrime(int n) {
int sum = 0;
printf ("%6d: ", n);
// find all powers of 2
while (n%2 == 0) {
printf("%d+", 2);
n /= 2;
sum += 2;
}
// checking for factors up to sqrt(n) is sufficient
for (int i = 3; i <= sqrt(n); i += 2) {
// find all powers of i
while (n%i == 0) {
printf("%d+", i);
n /= i;
sum += i;
}
}
// n is prime at this point
if (n > 2) {
printf ("%d", n);
sum += n;
}
printf (" = %d\n", sum);
return sum;
}
void main() {
sumPrime(226);
sumPrime(39);
sumPrime(775);
}
226: 2+113 = 115
39: 3+13 = 16
775: 5+5+31 = 41
求素数因子的一种有效算法
代码:
#include <stdio.h>
#include <math.h>
int sumPrime(int n) {
int sum = 0;
printf ("%6d: ", n);
// find all powers of 2
while (n%2 == 0) {
printf("%d+", 2);
n /= 2;
sum += 2;
}
// checking for factors up to sqrt(n) is sufficient
for (int i = 3; i <= sqrt(n); i += 2) {
// find all powers of i
while (n%i == 0) {
printf("%d+", i);
n /= i;
sum += i;
}
}
// n is prime at this point
if (n > 2) {
printf ("%d", n);
sum += n;
}
printf (" = %d\n", sum);
return sum;
}
void main() {
sumPrime(226);
sumPrime(39);
sumPrime(775);
}
226: 2+113 = 115
39: 3+13 = 16
775: 5+5+31 = 41
您的问题不清楚。请尝试提及一些输入和相应的输出。首先编写一个函数来查找素数因子。输入将是任何正整数。输出将是其素数因子之和。如果输入为12=4*3=2*2*3,则输出应为2+2+3=7 OK,因此一个问题是您只检查每个因子一次,即循环仅检查2是否除以12,而不是2除以12的次数。您的问题不清楚。请尝试提及一些输入和相应的输出。首先编写一个函数以查找素数因子。输入将是任何正整数。输出将是其素数因子之和。如果输入为12=4*3=2*2*3,则输出为uld为2+2+3=7Ok,因此一个问题是,您只检查每个因子一次,即循环仅检查2是否除以12,而不是2除以12的次数。在isPrime(int number)
中,在末尾添加for循环if(i>2)i++;
以仅用奇数搜索素数。在isPrime(int number)中
,在末尾添加for循环if(i>2)i++;
以仅使用奇数整数搜索素数。在sumPrime(int number)
中,在while循环if(factor>2)factor++;
末尾(在factor++
之前)中添加while循环以仅使用奇数整数搜索素数(因子的一半)@J.Piquard:是的。你是对的。因为可以进行优化。在sumPrime(int number)
中,将while循环if(factor>2)factor++;
添加到末尾(在factor++
之前),只使用奇数整数搜索素数(一半的因子尝试次数)@J.Piquard:是的。你说得对。因为可以进行优化。而不是i,而不是i