0을 입력할 때까지 소인수를 구함.


#include <stdio.h>

int main( )
{
	int i, j;
	int input, origin;
	int arr[100];

	printf( "0 이하를 입력하면 종료\n\n" );

	while( 1 )
	{
		printf( "수를 입력하세요 : " );
		scanf( "%d", &input );
		if( input <= 0 )	return 0;

		origin = input;

		i = 2;
		j = 0;

		//수인수분해 부분
		while( input>1 )
		{
			if( input%i == 0 )
			{
				input = input/i;
				arr[j] = i;
				++j;
			}			
			if( input%i != 0 )	i++;			
		}

		//출력
		if( origin != 1 )
		{
			printf( "소인수분해 결과 : " );

			for( i=0 ; i<j ; i++ )
			{
				printf( "%d", arr[i] );			
				if( i<j-1 )		printf( " x " );
				if( j-1 == i )	printf( " = %d", origin );
			}
		}
		if( origin==1 )	printf( "2이상을 입력" );

		printf( "\n\n" );
	}

	return 0;
}


일반적인 방법으로 소수의 합을 구하는 코드인데, 100만이나 200만 범위 내의 소수의 합을 구하려면 너무 느려요 ㅠㅠ 큰 범위 내의 소수의 합을 빠르게 구하고 싶으면 에라토스테네스의 체를 이용하면 됩니다.

//1부터 입력한 수까지 소수의 합
#include <stdio.h>

int prime( int a );

int main( )
{
	int input;
	int i;
	int sum;

	printf( "0을 입력하면 종료\n\n" );

	while(1)
	{
		sum = 0;

		//입력
		printf("양의 정수를 입력 : ");
		scanf( "%d", &input );
		if( input==0 )		return 0;

		//입력한 수까지 반복하고, 소수가 리턴되면서 누적
		for( i=2 ; i<=input ; i++ )
		{
			sum+=prime( i );
		}

		printf( "%d까지의 소수의 합 : %d\n\n\n", input,  sum );
	}

	return 0;
}

//소수를 구하는 함수
int prime( int a )
{
	int j;

	for(j=2 ; j<=a ; j++)
	{
		if(a%j == 0)
		{
			if(a == j) return a;
			if(a != j) return 0;
		}
	}
}




재귀호출로 처리

#define _MAX 10

#include <stdio.h>

int factorial( int su );

int main( )
{
	int i, sum=0;

	for( i=1 ; i<=_MAX ; i++ )
	{
		sum += factorial( i );
	}

	printf( "%d\n", sum );

	return 0;
}

int factorial( int su )
{
	if( su == 1 )
	{
		return su;
	}

	else
	{
		return su *= factorial( su-1 );
	}
}


이번에는 과정도 출력하며 _MAX 값을 바꿔줌에 따라 나열되는 항의 갯수가 바뀜


 


#define _MAX 20

#include <stdio.h>

int main( )
{
	int i=0, j=1;
	int sum=0;
	int arr[ _MAX ];

	//계산
	for( i=0 ; i<_MAX ; i++ )
	{
		j = j + i ;
		sum = sum + j;

		arr[i] = j;
	}

	//출력
	for( i=0 ; i<_MAX ; i++ )
	{
		printf( "%d", arr[i] );

		if( i != _MAX-1 )	printf( " + " );
		if( i == _MAX-1 )	printf( " = %d\n\n", sum );
	}

	return 0;
}


+ Recent posts