Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите найти ошибку. / 9 сообщений из 9, страница 1 из 1
26.04.2015, 13:07
    #38945502
ванмомас намбаван
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
В задаче надо вывести "elementary", если число является степенью двойки, или степенью тройки, или степенью пятерки, или простое, в противном случае вывести "one pipe".

Число в диапазоне от 0 до 2^31-1.


Код: plaintext
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.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
#include <iostream>
#include <stdio.h>

using namespace std;

bool isPrime(long long int n)
{
 if (n==1) return false;
    for (int i = 2; i*i<=n; ++i) {
        if (n%i==0) return false;
   }
  return true;
}

bool isTrojka(long long int m)
{
	
	
	if (m < 3)
	{
		return false;
	}
	while(m != 1)
	{
		if (m % 3 != 0)
		{
	    	return false;
		}
		m = m / 3;
	}
	return true;
}



bool is5(long long int m)
{
	
	
	if (m < 5)
	{
		return false;
	}
	while(m != 1)
	{
		if (m % 5 != 0)
		{
	    	return false;
		}
		m = m / 5;
	}
	return true;
}



long long int isDvojka(long long int x)
{
    return (x <= 0) ? 0 : (x & (x-1)) == 0;    
}



   int main()
   {
	   freopen("input.txt","r",stdin);
	   freopen("output.txt","w",stdout);
	   long long int a;
	   cin>>a;
	  
	  
	   if(isPrime(a)) cout<<"elementary";else
		   if(is5(a)) cout<<"elementary";else
			   if (isDvojka(a)==1) cout<<"elementary";else
				   if(isTrojka(a)) cout<<"elementary";else cout<<"one pipe";


   }
...
Рейтинг: 0 / 0
26.04.2015, 13:26
    #38945509
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
ванмомас намбаван,

Функция
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
bool isPrime(long long int n)
{
 if (n==1) return false;
    for (int i = 2; i*i<=n; ++i) {
        if (n%i==0) return false;
   }
  return true;
}



смешно выглядит. Тут ребята топики на 10 страниц на эту тему пишут, а ты...
Ну и если что -- 1 -- простое число. 2, если что -- тоже. Даже 3 -- простое.
...
Рейтинг: 0 / 0
26.04.2015, 21:36
    #38945661
tolyanchik
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
Ну, строго говоря, 1 - не простое (хотя и не составное, конечно:))
...
Рейтинг: 0 / 0
26.04.2015, 23:00
    #38945709
Anatoly Moskovsky
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
tolyanchikНу, строго говоря, 1 - не простое (хотя и не составное, конечно:))
Значит ошибок нет
...
Рейтинг: 0 / 0
27.04.2015, 06:59
    #38945778
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
ванмомас намбаванЧисло в диапазоне от 0 до 2^31-1.

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
bool isPrime(long long int n)
{
 if (n==1) return false;
    for (int i = 2; i*i<=n; ++i) {
        if (n%i==0) return false;
   }
  return true;
}


Тут с типами проблема:
для i недостаточно int , т.к. i*i может оказаться больше разрядности int. Тогда зациклится.
long long int n лишнее, т.к. для 2^31-1 достаточно просто int
...
Рейтинг: 0 / 0
27.04.2015, 07:55
    #38945790
SashaMercury
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
tolyanchikНу, строго говоря, 1 - не простое (хотя и не составное, конечно:))

Илья опечатался. Не простое, без "строго не строго".
...
Рейтинг: 0 / 0
27.04.2015, 09:06
    #38945828
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
Что значит "one pipe" ? Перевод - безсмысленный.
...
Рейтинг: 0 / 0
27.04.2015, 09:13
    #38945834
Dima T
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
maytonЧто значит "one pipe" ? Перевод - безсмысленный.
Что значит 2^N "elementary" ты уже понял? :)

Там задачка какая-то, а нам показан только алгоритм ее решения. Так что нет смысла гадать как там изначально вопрос стоял.
...
Рейтинг: 0 / 0
27.04.2015, 11:08
    #38945992
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
помогите найти ошибку.
Да постановка вообще странная. Для степеней двойки, тройки - тривиально а дальше Внезапно(!) проверка
на простоту. И не "elementary" a "composite" надо писать по смыслу.
...
Рейтинг: 0 / 0
Форумы / C++ [игнор отключен] [закрыт для гостей] / помогите найти ошибку. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]