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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 14, средняя оценка - 4.93
AKruglyak
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 24
#1

Корень из целого числа. - C++

23.02.2012, 16:14. Просмотров 1887. Ответов 3
Метки нет (Все метки)

Здравствуйте, решал вот эту задачу. Написал следующий код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
#include <iostream>
#include <math.h>
using namespace std;
int simple(int f);
int main(){
    long int a,f;
    cin>>a;
     int *b = new int [a];
     for(int i=0; i<a; i++)
     cin>>b[i];        
            
     for(int k=0; k<a; k++){
             f=0;
             f=b[k];
             if(f==1)
             cout<<"2\n";
             else if(f!=1)
             simple(f);
             
             } 
  
    }
    
 int simple(int f){
     long int b=1;
    int c=0;
    
  for(unsigned long int i=3; i<15000; i+=2){
         c=0;
         for(unsigned long  int k=2; k<=sqrt(i); k++){
                   if (i%k==0)
                   c++;      
                   }
                   if(!c)
                          b++;
                  if(f==b){
                          cout<<i<<"\n";
                          break;
                          return 0;}
          
       }
     
     }
И в Dev c++ всё прекрасно работает. Но тестирующая система выдает следующею ошибку:
2394d50f-45a1-4d8b-96c1-91540d2a1d30
2394d50f-45a1-4d8b-96c1-91540d2a1d30(30) : error C2668: 'sqrt' : ambiguous call to overloaded function
S:\checker\compile\vc10\include\math.h(589): could be 'long double sqrt(long double)'
S:\checker\compile\vc10\include\math.h(541): or 'float sqrt(float)'
S:\checker\compile\vc10\include\math.h(127): or 'double sqrt(double)'
while trying to match the argument list '(unsigned long)'
Как я понял причина в том, что корень берется из целого числа, а должен браться из числа с плавающей запятой. Не долго думаю я заменил unsigned long int на float, чего делать не рекомендуется, и тут же получил другую ошибку, что вполне логично:
8ac29b8a-d7f7-4e4c-9a4d-9560ca0434bc
8ac29b8a-d7f7-4e4c-9a4d-9560ca0434bc(31) : error C2296: '%' : illegal, left operand has type 'float'
И так, как исправить мой код, чтобы он работал в тестирующей системе?

Добавлено через 8 минут
Еще я пробовал изменить функцию simple следующим образом:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
 int simple(int f){
     long int b=1;
    int c=0;
    
  for(unsigned long int i=3; i<15000; i+=2){
         c=0;
         for(unsigned long  int k=1; k<=i; k++){
                   if (i%k==0)
                   c++;      
                   }
                   if(c==2)
                          b++;
                  if(f==b){
                          cout<<i<<"\n";
                          break;
                          return 0;}
          //         cout<<i<<' ';
       }
     
     }
И на моем компьютера программа исполняется мгновенно, но в тестирующей системе получаю Time limit exceeded, так как программа выполняется на одну сотую дольше, чем надо.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
23.02.2012, 16:14     Корень из целого числа.
Посмотрите здесь:

Выделить кубический корень из не целого числа - C++
Ребят, нужна ваша помощь! Как выделить кубический корень из НЕ целого числа? P.S. pow(r,1/3) не работает.

Можно ли взять корень квадратный из целого числа без остатка? - C++
Как унать, возможно ли вынести корень из числа а?

Составить рекурсивную функцию, которая находит цифровой корень целого числа - C++
Составить рекурсивную функцию, которая находит цифровой корень целого числа. Цифровой корень находится суммой через сумму цифр числа до...

Составить рекурсивную функцию, которая находит цифровой корень целого числа - C++
помогите решить задачу на С++ Составить рекурсивную функцию, которая находит цифровой корень целого числа. Цифровой корень находится...

Вычислить квадратный корень из заданного целого числа, используя только побитовые операции - C++
Существует простой способ вычисления квадратного корня: квадратный корень из целого числа равен количеству последовательных целых чисел...

Вставить после числа, являющегося полным квадратом, квадратный корень этого числа - C++
Вставить после числа, являющегося полным квадратом, квадратный корень этого числа. Вообще не понимаю как это написать в Си( ...

Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -> 3153) - C++
Из целого числа получить новое, состоящее из нечетных цифр числа (2315663 -&gt; 3153) на DevC++. Заранее спасибо

нужен тип целого числа для числа 19!= 121 645 100 408 832 000 - C++
Нужно посчитать сумму цифр целого положительного числа. double summacifr(double chislo) { double summa=0; while(chislo) ...

Получить корень из числа - C++
Всем привет. К примеру такой код #include&lt;iostream&gt; #include&lt;math.h&gt; #include&lt;stdlib.h&gt;

Вычислить корень из числа. - C++
//--------------------------------------------------------------------------- #pragma hdrstop #include &lt;tchar.h&gt; #include...

Квадратный корень числа - C++
Найдите квадратный корень числа, введенного с клавиатуры! С++

Цифровой корень числа - C++
Найти цифровой корень натурального числа (складываются все цифры числа, затем все цифры найденной суммы и т.д. до тех пор, пока не будет...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
23.02.2012, 16:21     Корень из целого числа. #2
C++
1
2
int n = 5;
float a = sqrt (float(n));
AKruglyak
0 / 0 / 0
Регистрация: 18.02.2012
Сообщений: 24
23.02.2012, 17:56  [ТС]     Корень из целого числа. #3
Спасибо, оказалось этого не достаточно. В погоне за производительностью было решено найти максимальное число из предложенных, один раз посчитать все простые числа до него и записать их в массиве, откуда уже читать остальные. Получилось вот что:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <math.h>
using namespace std;
 
int main(){
      long int a,f, ok;
    cin>>a;
     int *b = new int [a];
     for(int i=0; i<a; i++)
     cin>>b[i];        
      int maximum=0;
         for(int g=0;g<=a; g++)
         {if (b[g]>maximum) 
         maximum=b[g];
               }   
                    long int bj=1;
     long int cj=0;
     long int p[maximum];
  for( long int i=3; i<=maximum; i+=2){
         cj=0;
         for( long int k=2; k<=i/2; k++){
                   if (i%k==0)
                   cj++;      
                   }
                   if(!cj){
                          bj++;
                      p[bj]=i;
                      }    
                 
     }
               
    
     for(int k=0; k<a; k++){
             f=0;
             ok=0;
             f=b[k];
             if(f==1)
             cout<<"2\n";
            else if(f!=1){
           ok=p[f];
             cout<<ok<<"\n";}
             }
     system("PAUSE");
    }
Теперь программа работает вообще странно, считать она считает, но далеко не все числа, и не могу найти закономерность тех чисел, которые считать она отказалась, а их много. В чем ошибка?
Dani
1278 / 636 / 56
Регистрация: 11.08.2011
Сообщений: 2,277
Записей в блоге: 2
Завершенные тесты: 1
23.02.2012, 18:39     Корень из целого числа. #4
1) Вы проверяете число от 2 до n/2. Если уже так, то проверять до корня.
2) Лучше всего проверять на простоту решетом Эратосфена. Представим, что все числа записаны в ряд:
2 3 4 5 6 7 8 9 10 11 12 13 14 15

2 - число простое, оставляем его и убираем все числа, которые делятся на 2, т.к. они будут составными

2 3 5 7 9 11 13 15

3 - число простое, удаляем все числа делящиеся на 3
2 3 5 7 11 13

Вот вам и остались все простые числа в интервале [1; 15]
Yandex
Объявления
23.02.2012, 18:39     Корень из целого числа.
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru