Форум программистов, компьютерный форум CyberForum.ru

Число простых делителей не превосходящих х на С++ рекурсивно - C++

Восстановить пароль Регистрация
 
Piro
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 5
13.05.2012, 13:47     Число простых делителей не превосходящих х на С++ рекурсивно #1
Салют,народ! Помогите пожалуйста.Срочно нужна задачка:
Найти число простых делителей не превосходящих х решённая рекурсивно.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.05.2012, 13:47     Число простых делителей не превосходящих х на С++ рекурсивно
Посмотрите здесь:

Среди простых чисел , не превосходящих заданного натурального числа N .Найти такие, в десятичном представление которых больше всего нулей C++
C++ Среди простых чисел, не превосходящих N, найти такое, в десятичной записи которого максимальное число единиц
Определить натуральное число не больше заданного n с наибольшим числом простых делителей C++
C++ Описать функцию f(x) – количество разных простых делителей числа х
C++ Функция определения суммы простых делителей числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
13.05.2012, 14:10     Число простых делителей не превосходящих х на С++ рекурсивно #2
Если 1 не считать как простой делитель, то

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
using namespace std;
int k=70;
int func(int number){
    if (number>(int)sqrt((double)k)) return 0;
    bool f=1;
    for (unsigned int i=2;i<(int)sqrt((double)number);i++)
        if (number%i==0) {f=0;break;}
    if (f) return func(number+1)+1;
        else return func(number+1); 
};
int main(){
    cout<<func(2);
    getch();
    return 0;
}
k=x; забыл переназвать
Piro
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 5
13.05.2012, 14:56  [ТС]     Число простых делителей не превосходящих х на С++ рекурсивно #3
Понятно.Но если х это введённое число? То есть нужно найти делители не превосходящие х.
Nikolay_it
5 / 5 / 0
Регистрация: 08.05.2012
Сообщений: 15
13.05.2012, 14:58     Число простых делителей не превосходящих х на С++ рекурсивно #4
C++
1
2
3
4
5
6
7
int main(){
    int x;
    cin >> x;
    cout<<func(x);
    getch();
    return 0;
}
Piro
0 / 0 / 0
Регистрация: 08.04.2012
Сообщений: 5
14.05.2012, 08:55  [ТС]     Число простых делителей не превосходящих х на С++ рекурсивно #5
Понятно.Большое спасибо.

Добавлено через 17 часов 53 минуты
Выявились бока.Если вводим простое число,то подсчёт неверен.
Ternsip
 Аватар для Ternsip
660 / 188 / 6
Регистрация: 10.05.2012
Сообщений: 595
14.05.2012, 09:59     Число простых делителей не превосходящих х на С++ рекурсивно #6
Цитата Сообщение от Piro Посмотреть сообщение
Понятно.Большое спасибо.

Добавлено через 17 часов 53 минуты
Выявились бока.Если вводим простое число,то подсчёт неверен.
Давайте тесты.
Возможно ошибки из-за округления в int просто на delphi я обычно писал trunc(sqrt(n))

Добавлено через 10 минут
Виноват, да! был баг

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
using namespace std;
int k=7;
int func(int number){
    if (number>sqrt((double)k)) return 0;
    bool f=1;
    if (k%number!=0) f=0;
    if (f)
        for (unsigned int i=2;i<sqrt((double)number);i++)
            if (number%i==0) {f=0;break;}
    if (f) return func(number+1)+1;
        else return func(number+1); 
};
int main(){
    cout<<func(2);
    getch();
    return 0;
}
Я забыл вставить проверку того, что K%number==0

Кажется ещё 1 баг нашёл, сек

Добавлено через 4 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
using namespace std;
int k=24;
int func(int number){
    if (number>sqrt((double)k)) return 0;
    bool f=1;
    if (k%number!=0) f=0;
    if (f)
        for (unsigned int i=2;i<=sqrt((double)number);i++)
            if (number%i==0) {f=0;break;}
    if (f) return func(number+1)+1;
        else return func(number+1); 
};
int main(){
    cout<<func(2);
    getch();
    return 0;
}
Теперь всё верно, вроде там <= надо, а было <

Добавлено через 3 минуты
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <cmath>
using namespace std;
int func(int number,int &x){
    if (number>sqrt((double)x)) return 0;
    bool f=1;
    if (x%number!=0) f=0;
    if (f)
        for (unsigned int i=2;i<=sqrt((double)number);i++)
            if (number%i==0) {f=0;break;}
    if (f) return func(number+1,x)+1;
        else return func(number+1,x); 
};
int main(){
    int x=0;
    cin>>x;
    cout<<func(2,x);
    getch();
    return 0;
}

+ считывание с консоли числа x
Последнее -- то как вы хотели
Yandex
Объявления
14.05.2012, 09:59     Число простых делителей не превосходящих х на С++ рекурсивно
Ответ Создать тему
Опции темы

Текущее время: 23:40. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru