Posted by : Unknown 15 November 2013

Đề bài: Cho \[F(x),x \ge 0\]   được định nghĩa như sau:


\[F(x) = \left\{ \begin{array}{c} x,x \le 9\\ F(S(x)),x > 9 \end{array} \right.\]
Trong đó S(x): tổng các chữ số của x
Hãy viết chương trình tính F(n!) với 1<=n<=500

Ý tưởng: 

Với: 
n=0: F(0!) = 1
n=1: F(1!) = 1
n=2: F(2!) = F(1.2) = F(2) = 2
n=3: F(3!) = F(1.2.3) = F(6) = 6
n=4: F(4!) = F(1.2.3.4) = F(24) = F[S(24)] = 6
n=5: F(5!) = F(1.2.3.4.5) = F(120) = F[S(120)] = 3
n=6: F(6!) = F(1.2.3.4.5.6) = F(720) = F[S(720)] = 9
n=7: F(7!) = F(1.2.3.4.5.6.7) = F(5040) = F[S(5040)] = 9
n=8: F(8!) = F(1.2.3.4.5.6.7.8) = F(40320) = F[S(40320)] = 9
...
n=15: F(15!) = F(1307674368000) = F[S(1307674368000)] = 9

Nhận xét:

Với n=6, ta có
\[6! = 1.2.3.4.5.6 = {1.2^4}{.3^2}.5 \vdots 9\]
vậy 
\[S(6!) \vdots 9\]
Do đó
\[n \ge 6,S(n!) = 9 => F(n!) = 9\]

Một cách tổng quát, ta có \[F(x) = \left\{ {\begin{array}{*{20}{l}} {1,x = 0}\\ {1,x = 1}\\ {2,x = 2}\\ {6,x = 3}\\ {6,x = 4}\\ {3,x = 5}\\ {9,x \ge 6} \end{array}} \right.\]


Mã nguồn:

#include <stdio.h>
int main()
{
        int n;
        scanf("%d", &n);
        switch (n)
        {
        case 0: printf("1\n"); break;
        case 1: printf("1\n"); break;
        case 2: printf("2\n"); break;
        case 3: printf("6\n"); break;
        case 4: printf("6\n"); break
        case 5: printf("3\n"); break;
        default: printf("9\n"); break;
        }
        return 0;
}
#include <stdio.h>
int main()
{
 int n;
 scanf("%d", &n);
 switch (n)
 {
 case 0: printf("1\n"); break;
 case 1: printf("1\n"); break;
 case 2: printf("2\n"); break;
 case 3: printf("6\n"); break;
 case 4: printf("6\n"); break; 
 case 5: printf("3\n"); break;
 default: printf("9\n"); break;
 }
 return 0;
}

Leave a Reply

Subscribe to Posts | Subscribe to Comments

Popular Post

Blogger templates

Pages

Powered by Blogger.

About

- Copyright © Meo's Blog -Metrominimalist- Powered by Blogger - Designed by Johanes Djogan -