Computer >> 컴퓨터 >  >> 프로그램 작성 >> C++

C++에서 소인수가 2와 3인 범위에서 숫자 세기

<시간/>

숫자 범위를 정의하기 위해 두 개의 숫자 START와 END가 제공됩니다. 목표는 2와 3만 소인수로 갖고 [START,END] 범위에 있는 숫자를 찾는 것입니다.

START에서 END까지 숫자를 순회하여 이를 수행하고 각 숫자에 대해 숫자가 2와 3으로만 나누어 떨어지는지 확인합니다. 나눌 수 있으면 나누어서 줄이십시오. 그렇지 않은 경우 루프를 끊습니다. 결국 숫자가 1로 줄어들면 인수는 2와 3뿐입니다.

예를 들어 이해합시다.

입력

START=20 END=25

출력

소인수로 2와 3만 있는 숫자:1

설명

각 수의 소인수:20 =2*2*521 =3*722 =2*1123 =1*2324 =2*2*2*325 =5*524만 소인수 2와 3을 가집니다. 

입력

START=1000 END=1500

출력

소인수로 2와 3만 있는 숫자:4

설명

1024 1152 1296 1458은 2와 3만 소인수인 숫자입니다.

아래 프로그램에서 사용된 접근 방식은 다음과 같습니다.

  • 범위 변수로 정수 START 및 END를 사용합니다.

  • 함수 twothreeFactors(int start, int end)는 범위 변수를 사용하고 2와 3을 소인수로만 사용하는 숫자의 개수를 반환합니다.

  • 이러한 숫자에 대해 초기 변수 개수를 0으로 간주합니다.

  • for 루프를 사용하여 숫자 범위를 탐색합니다. i=시작에서 i=끝

  • 이제 각 숫자 num=i에 대해 while 루프 검사를 사용하여 num%2==0이면 나눕니다.

  • num%3==0이면 나눕니다. 둘 다 아닌 경우 while 루프를 끊습니다.

  • while 루프 이후에 num이 1이면 카운트를 늘립니다.

  • 모든 루프가 끝나면 카운트는 2와 4만 소인수로 갖는 총 수를 갖게 됩니다.

  • 카운트를 결과로 반환합니다.

예시

#include using namespace std;int twothreeFactors(int start, int end){ // 2로 시작하여 1이 계산되지 않도록 if (start ==1) { start++; } 정수 개수 =0; for (int i =시작; i <=끝; i++) { int num =i; while(num>1){ // 2로 나눌 수 있으면 2로 나눕니다. if(num % 2 ==0) { num /=2; } // 3으로 나눌 수 있으면 3으로 나눕니다. else if (num % 3 ==0) { num /=3; } else // 2나 3으로 나눌 수 없는 경우 break { break; } } // 2와 3만 num의 인수라는 것을 의미합니다. if (num ==1) { count++; } } 반환 횟수;}int main(){ int START =10, END =20; cout <<"소인수로 2와 3만 있는 숫자:"< 

출력

위의 코드를 실행하면 다음 출력이 생성됩니다 -

소인수로 2와 3만 있는 숫자:3