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