#include<iostream>
#include<map>
#include<algorithm>
#include<math.h>
using namespace std ;
map< long long int , long long int > prim ;
map< long long int , long long int >::iterator it ;
int c, counter, check ;
long long int b ;
int prime( long long int t)
{
if( t==1 )
{
prim[1] = 1 ;
counter = 1 ;
it=prim.begin() ;
//cout<< it->second ;
return 1 ;
}
else
{
check = -1 ;
long long int f ;
f= int(sqrt(t)) ; // could create prob
for( it=prim.begin() ; it!= prim.end() || it->second <=f ; it++)
{
if( (t % (it->second))==0 && it->second != 1 )
{
cout << "not prime " << "\n" ;
check = 0 ;
// not prime
break ;
}
}
if(check==-1)
{
// prime ;
counter ++ ;
prim[counter] = t ;
return 1 ;
}
else if(check==0)
return 0 ;
}
}
int main()
{
int check2 ;
check2 = 1 ; // value set 1 to call it prime
cout<< "input no ";
cout<<"\n";
cin >>b ;
for( long long int z=1 ;z <=int(sqrt(b)); z++ )
{
c = prime(z) ;
//cout<<"z is "<<z <<"\n";
if ( c==1 && z!=1 )
{
if((b%z) == 0)
{
//cout<< "not prime " ;
check2 = 0 ;
break ;
}
}
}
if(check2!=0)
{
cout<<"\n";
cout<< "prime" ;
}
else
cout<< "not prime " ;
for( it=prim.begin() ; it!= prim.end() ; it++)
{
cout<<"\n" ;
cout<< it->first ;
cout<< it->second ;
cout<< " \n" ;
}
return 0 ;
}
добре, имам проблеми с числа като над 200 и които са прости. програмата не се изпълнява правилно и дава неочаквани стойности.
ако можете да ми кажете за грешките или по-добри начини за генериране на карта на прости числа, моля, направете го!
a, c,d , h , i ,j , k , l, b
не са добри имена за променливи; отнема много повече време за четене и разбиране на програмата с такива имена; и е по-трудно сами да намерите проблеми... - person Alex Shesterov   schedule 10.02.2015map
? Обикновеноvector
би било по-подходящо за това. - person alain   schedule 10.02.2015