2016-12-04 2 views
0

Я не могу удовлетворить все условия простых множителей числа, чтобы найти правильную сумму.Функция для поиска суммы простых коэффициентов целого числа

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; 

      } 
    } 
+0

Ваша проблема непонятна. Попробуйте указать некоторый ввод и соответствующий вывод. – Mohayemin

+0

Сначала напишите функцию, чтобы найти основные факторы. – MayurK

+0

Ну, вход будет любым положительным целым числом. Результатом будет сумма его основных факторов. – utdlegend

ответ

2

Я думаю, что код сам пояснительный. Он работает для 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] 
+1

В 'sumPrime (int number)' добавьте в while-цикл 'if (factor> 2) factor ++;' в конце (перед 'factor ++') для поиска простого числа только с нечетными целыми числами (половина числа факторов пытается). –

+0

@ J.Piquard: Да. Ты прав. Поскольку эта оптимизация может быть выполнена. – MayurK

0
#include <stdio.h> 

int main(){ 


    printf("sum is%i",sumCount(12)); 
    return 0; 
} 
int sumCount(int number){ 
int count,sum=0; 
for(count=2;count<number;count++){ 
    if(isPrime(count)==1){ 
     printf("%i \n",count); 
     sum+=count; 
    } 
} 
return sum; 
} 
int isPrime(int number){ 
    int i; 
    for (i=2;i<=number/2 ;i++){ 
     if(number%i==0){ 
     return 0; 
    } 
} 
return 1; 
} 
+0

В 'isPrime (int number)', добавьте в for-loop 'if (i> 2) i ++;' в конце для поиска простого числа только с нечетными целыми числами. –

0

эффективный алгоритм, чтобы найти простые множители

Код:

#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 
+0

Вместо 'i <= sqrt (n)' считать 'i <= n/i', чтобы избежать проблем с FP и различий точности« int/double ». – chux

Смежные вопросы