500개 이상의 약수를 가지는 첫번째 숫자를 찾아내는 문제.
#include
#include
int numberOfFactors(unsigned long long );
int main(){
unsigned long long i=3ll;
while(1){
printf(“i=%lld\t”,i);
if(numberOfFactors(i*(i+1ll)/2ll)>500){
printf(“%lld has more 500 divisors\n”,i*(i+1ll)/2ll);
exit(1);
}
i++;
}
return 1;
}
int numberOfFactors(unsigned long long p){
unsigned long long n,i;
n=0ll;
for(i=1ll;i<((p/2ll)+1ll);i++){
if(p%i==0ll){
// printf(“%lld,”,i);
n++;
}
}
printf(“n=%lld\tp=%lld\n”,n,p);
return n;
}

저는 정해진 횟수 내에 답이 나올 것이 확실하면 for를 쓰고, 될때까지 해야 하는 문제는 while을 씁니다.
나름의 규칙은 있답니다 –;
저는 프로그래밍할 때 대부분 for문을 주로 애용했었는데…..(초기조건, 변화조건, 탈출조건을 보기 쉽게 작성할 수 있기 때문이었죠.)
snowall님은 주로 while문을 사용하시는군요. ㅎㅎㅎ
아무튼 컴퓨터의 알고리즘 문제는 반복순환문이 많다보니 for나 while 한 가지 정도만 잘 쓰면 되는 것 같아요.