Problem Type GCD
Problem Difficulty Easy
Problem Link
Problem Statement
 
Problem Difficulty Easy
Problem Link
Problem Statement
Here GCD(i,j) means the greatest common divisor of integer i and integer j.
For those who have trouble understanding summation notation, the meaning of G is given in the following code:
| 
G=0; 
for(i=1;i<N;i++) 
for(j=i+1;j<=N;j++) 
{ 
    G+=GCD(i,j); 
} 
/*Here GCD() is a function that finds the greatest common divisor of the two input numbers*/ | 
Input
The input file contains at most 100 lines of inputs. Each line contains an integer N (1<N<501). The meaning of N is given in the problem statement. Input is terminated by a line containing a single zero.  This zero should not be processed.
Output
For each line of input produce one line of output. This line contains the value of G for corresponding N.
Sample Input Output for Sample Input
| 
10 
100 
500 
0 | 
67 
13015 
442011 | 
Problemsetter: Shahriar Manzoor
Special Thanks: Syed Monowar Hossain
Solution
#include <cstdio>
#include <algorithm>
using namespace std;
long long ans[210000];
int gcd[501][501];
//Time : 0.016
int main()
{
    for(int i = 2; i < 500; i++){
        for(int j = i; j <= 500; j += i){
            gcd[i][j] = i;
        }
    }
 ans[0] = 0;
 for (int n = 1; n <= 500; n++) {
  ans[n] = ans[n-1];
  for (int i = 1; i < n; i++)
   ans[n] += (!gcd[i][n])?gcd[i][n] = __gcd(i,n) : gcd[i][n];
 }
 int N;
    while(scanf("%d",&N) && N)
        printf("%lld\n",ans[N]);
}

 
 
1 comment:
very good tutorial .. https://hellocsbd.blogspot.com
Post a Comment