Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 21.09.2012, 00:36   #1
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
Лампочка Решето эротосфена(С++)

Здравствуйте, помогите сделать программу. Мне надо сделать программу которая рассматривает мою матрицу, находит в ней простые числа и выводит сумму простых чисел. пробовал использовать:
Код:
#include <iostream>
#include <conio.h>
#include <stdio.h>
#include <math.h>
#include <locale>
using namespace std;

bool prost(int x)
{
	if ((x==2)||(x==3))
		return true;
	if (x<2 || x%2==0 || x%3==0)
		return false;
	if (x%sqrt(x)==00)                  в этой строчке выдает сообщение что "неоднозначный вызов перегруженной функции" как исправить? 
Если удалить строчку она работает, но только в результате программы выяснил что в списке имеются некоторые числа которые не должны быть (примером служит число 25).
		return false;
	for (int i=3; i*i<x; i+=2)
		if (x%i==0)
			return false;
		else
		return true;
}

int main()
{
	setlocale(LC_ALL,"rus");
	const int n=3,m=3;
	int **a,s=0;
	cout<<"Заполняем матрицу: ";
	a=new int *[n];
	for(int i=0;i<n;i++)
	{
		a[i]=new int [m];
		for(int j=0;j<m;j++)
		{
			cin>>a[i][j];
			if (prost(a[i][j]))
			s+=a[i][j];
		}
	}
	puts("\n------------------Матрица-------------------");
	for(int i=0;i<n;i++)
	{
		for(int j=0;j<m;j++)
			cout<<a[i][j]<<" ";
	cout<<endl;
	}
	cout<<"Сумма всех простых элементов матрицы"<<") "<<s<<" "<<endl;
	return 0;
	system("pause");
}
также нашел решето эратосфена:
Код:
#include <stdio.h>
    #define N 20000
    unsigned int a[N];
    void main(){
       for(int i=0; i<N; i++){
           a[i] = i;
       }
       a[1]=0;
       for(int s=2; s<N; s++){
           if(a[s]!=0){
               for(int j=s*2; j<N; j+=s){
                   a[j]=0;
               }
           }
       }
       for(i=0; i<N; i++){
           if(a[i]!=0){
                printf("%d\n", a[i]);
           }
       }
    }
но я не знаю как мне объединить их так что бы полученная программу работала, пробовал сделать это но в итоге ничего не получилось, посоветуйте как мне это реализовать.

Последний раз редактировалось Alex_Dep; 21.09.2012 в 00:46.
Alex_Dep вне форума Ответить с цитированием
Старый 21.09.2012, 09:12   #2
waleri
Старожил
 
Регистрация: 13.07.2012
Сообщений: 6,371
По умолчанию

sqrt(x) переделайте на sqrt(double(x))
waleri вне форума Ответить с цитированием
Старый 22.09.2012, 22:33   #3
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

в таком случае выдает "% недопустимо, правый оператор имеет тип double". как мне это изменить?

Последний раз редактировалось Alex_Dep; 22.09.2012 в 22:42.
Alex_Dep вне форума Ответить с цитированием
Старый 22.09.2012, 23:46   #4
Alex_Dep
Пользователь
 
Регистрация: 18.01.2012
Сообщений: 26
По умолчанию

все я смог доделать свою программу, спасибо что подсказал. тема закрыта
Alex_Dep вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
решето эратосфена Выхухольxxx Общие вопросы Delphi 1 06.06.2011 13:20
[C++] Решето эратосфена, где баг ? Silly Student Помощь студентам 3 20.04.2011 13:06
Решето Эратосфена cbuilderx Помощь студентам 1 25.10.2010 18:44