[]
Programın yaptığı iş?(Algoritma ,c vs)
Naptığını tam çözemedim şöle çıktı verio
N Pİ
1 0
2 1
4 2
8 4
16 6
. .
. .
. .
böyle devam ediyor
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
# include <time.h>
# include "mpi.h"
int main ( int argc, char *argv[] );
int prime_number ( int n, int id, int p );
void timestamp ( void );
/******************************************************************************/
int main ( int argc, char *argv[] )
/******************************************************************************/
/*
Purpose:
MAIN is the main program for PRIME_MPI.
Discussion:
This program calls a version of PRIME_NUMBER that includes
MPI calls for parallel processing.
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
07 August 2009
Author:
John Burkardt
*/
{
int i;
int id;
int ierr;
int n;
int n_factor;
int n_hi;
int n_lo;
int p;
int primes;
int primes_part;
double wtime;
n_lo = 1;
n_hi = 262144;
n_factor = 2;
/*
Initialize MPI.
*/
ierr = MPI_Init ( &argc, &argv );
/*
Get the number of processes.
*/
ierr = MPI_Comm_size ( MPI_COMM_WORLD, &p );
/*
Determine this processes's rank.
*/
ierr = MPI_Comm_rank ( MPI_COMM_WORLD, &id );
if ( id == 0 )
{
timestamp ( );
printf ( "\n" );
printf ( "PRIME_MPI\n" );
printf ( " C/MPI version\n" );
printf ( "\n" );
printf ( " An MPI example program to count the number of primes.\n" );
printf ( " The number of processes is %d\n", p );
printf ( "\n" );
printf ( " N Pi Time\n" );
printf ( "\n" );
}
n = n_lo;
while ( n <= n_hi )
{
if ( id == 0 )
{
wtime = MPI_Wtime ( );
}
ierr = MPI_Bcast ( &n, 1, MPI_INT, 0, MPI_COMM_WORLD );
primes_part = prime_number ( n, id, p );
ierr = MPI_Reduce ( &primes_part, &primes, 1, MPI_INT, MPI_SUM, 0,
MPI_COMM_WORLD );
if ( id == 0 )
{
wtime = MPI_Wtime ( ) - wtime;
printf ( " %8d %8d %14f\n", n, primes, wtime );
}
n = n * n_factor;
}
/*
Terminate MPI.
*/
ierr = MPI_Finalize ( );
/*
Terminate.
*/
if ( id == 0 )
{
printf ( "\n");
printf ( "PRIME_MPI - Master process:\n");
printf ( " Normal end of execution.\n");
printf ( "\n" );
timestamp ( );
}
return 0;
}
/******************************************************************************/
int prime_number ( int n, int id, int p )
/******************************************************************************/
/*
Purpose:
PRIME_NUMBER returns the number of primes between 1 and N.
Discussion:
In order to divide the work up evenly among P processors, processor
ID starts at 2+ID and skips by P.
A naive algorithm is used.
Mathematica can return the number of primes less than or equal to N
by the command PrimePi[N].
N PRIME_NUMBER
1 0
10 4
100 25
1,000 168
10,000 1,229
100,000 9,592
1,000,000 78,498
10,000,000 664,579
100,000,000 5,761,455
1,000,000,000 50,847,534
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
21 May 2009
Author:
John Burkardt
Parameters:
Input, int N, the maximum number to check.
Input, int ID, the ID of this process,
between 0 and P-1.
Input, int P, the number of processes.
Output, int PRIME_NUMBER, the number of prime numbers up to N.
*/
{
int i;
int j;
int prime;
int total;
total = 0;
for ( i = 2 + id; i <= n; i = i + p )
{
prime = 1;
for ( j = 2; j < i; j++ )
{
if ( ( i % j ) == 0 )
{
prime = 0;
break;
}
}
total = total + prime;
}
return total;
}
/******************************************************************************/
void timestamp ( void )
/******************************************************************************/
/*
Purpose:
TIMESTAMP prints the current YMDHMS date as a time stamp.
Example:
31 May 2001 09:45:54 AM
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
24 September 2003
Author:
John Burkardt
Parameters:
None
*/
{
# define TIME_SIZE 40
static char time_buffer[TIME_SIZE];
const struct tm *tm;
size_t len;
time_t now;
now = time ( NULL );
tm = localtime ( &now );
len = strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm );
printf ( "%s\n", time_buffer );
return;
# undef TIME_SIZE
}
N Pİ
1 0
2 1
4 2
8 4
16 6
. .
. .
. .
böyle devam ediyor
# include <stdlib.h>
# include <stdio.h>
# include <math.h>
# include <time.h>
# include "mpi.h"
int main ( int argc, char *argv[] );
int prime_number ( int n, int id, int p );
void timestamp ( void );
/******************************************************************************/
int main ( int argc, char *argv[] )
/******************************************************************************/
/*
Purpose:
MAIN is the main program for PRIME_MPI.
Discussion:
This program calls a version of PRIME_NUMBER that includes
MPI calls for parallel processing.
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
07 August 2009
Author:
John Burkardt
*/
{
int i;
int id;
int ierr;
int n;
int n_factor;
int n_hi;
int n_lo;
int p;
int primes;
int primes_part;
double wtime;
n_lo = 1;
n_hi = 262144;
n_factor = 2;
/*
Initialize MPI.
*/
ierr = MPI_Init ( &argc, &argv );
/*
Get the number of processes.
*/
ierr = MPI_Comm_size ( MPI_COMM_WORLD, &p );
/*
Determine this processes's rank.
*/
ierr = MPI_Comm_rank ( MPI_COMM_WORLD, &id );
if ( id == 0 )
{
timestamp ( );
printf ( "\n" );
printf ( "PRIME_MPI\n" );
printf ( " C/MPI version\n" );
printf ( "\n" );
printf ( " An MPI example program to count the number of primes.\n" );
printf ( " The number of processes is %d\n", p );
printf ( "\n" );
printf ( " N Pi Time\n" );
printf ( "\n" );
}
n = n_lo;
while ( n <= n_hi )
{
if ( id == 0 )
{
wtime = MPI_Wtime ( );
}
ierr = MPI_Bcast ( &n, 1, MPI_INT, 0, MPI_COMM_WORLD );
primes_part = prime_number ( n, id, p );
ierr = MPI_Reduce ( &primes_part, &primes, 1, MPI_INT, MPI_SUM, 0,
MPI_COMM_WORLD );
if ( id == 0 )
{
wtime = MPI_Wtime ( ) - wtime;
printf ( " %8d %8d %14f\n", n, primes, wtime );
}
n = n * n_factor;
}
/*
Terminate MPI.
*/
ierr = MPI_Finalize ( );
/*
Terminate.
*/
if ( id == 0 )
{
printf ( "\n");
printf ( "PRIME_MPI - Master process:\n");
printf ( " Normal end of execution.\n");
printf ( "\n" );
timestamp ( );
}
return 0;
}
/******************************************************************************/
int prime_number ( int n, int id, int p )
/******************************************************************************/
/*
Purpose:
PRIME_NUMBER returns the number of primes between 1 and N.
Discussion:
In order to divide the work up evenly among P processors, processor
ID starts at 2+ID and skips by P.
A naive algorithm is used.
Mathematica can return the number of primes less than or equal to N
by the command PrimePi[N].
N PRIME_NUMBER
1 0
10 4
100 25
1,000 168
10,000 1,229
100,000 9,592
1,000,000 78,498
10,000,000 664,579
100,000,000 5,761,455
1,000,000,000 50,847,534
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
21 May 2009
Author:
John Burkardt
Parameters:
Input, int N, the maximum number to check.
Input, int ID, the ID of this process,
between 0 and P-1.
Input, int P, the number of processes.
Output, int PRIME_NUMBER, the number of prime numbers up to N.
*/
{
int i;
int j;
int prime;
int total;
total = 0;
for ( i = 2 + id; i <= n; i = i + p )
{
prime = 1;
for ( j = 2; j < i; j++ )
{
if ( ( i % j ) == 0 )
{
prime = 0;
break;
}
}
total = total + prime;
}
return total;
}
/******************************************************************************/
void timestamp ( void )
/******************************************************************************/
/*
Purpose:
TIMESTAMP prints the current YMDHMS date as a time stamp.
Example:
31 May 2001 09:45:54 AM
Licensing:
This code is distributed under the GNU LGPL license.
Modified:
24 September 2003
Author:
John Burkardt
Parameters:
None
*/
{
# define TIME_SIZE 40
static char time_buffer[TIME_SIZE];
const struct tm *tm;
size_t len;
time_t now;
now = time ( NULL );
tm = localtime ( &now );
len = strftime ( time_buffer, TIME_SIZE, "%d %B %Y %I:%M:%S %p", tm );
printf ( "%s\n", time_buffer );
return;
# undef TIME_SIZE
}
0-N arasında Pİ kadar asal sayı vardır.
N Pİ
1 0 - []
2 1 - [2]
4 2 - [2,3]
8 4 - [2,3,5,7]
16 6 - [2,3,5,7,11,13]
. .
. .
N Pİ
1 0 - []
2 1 - [2]
4 2 - [2,3]
8 4 - [2,3,5,7]
16 6 - [2,3,5,7,11,13]
. .
. .
- ocanal (26.11.12 22:42:57)
1