Problem Description
source:https://uva.onlinejudge.org/external/120/12043.html
Let us define the functions d(n) and σ(n) as
d(n) = number of divisors of n
σ(n) = summation of divisors of n
Here divisors of n include both 1 and n. For example divisors of 6 are 1, 2, 3 and 6. So d(6) = 4 and σ(n) = 12.
Now let us define two more function g(a, b, k) and h(a, b, k) as
g(a, b, k) = ∑ i d(i)
h(a, b, k) = ∑ i σ(i)
Where a ≤ i ≤ b and i is divisible by k.
For example, g(5, 12, 3) = d(6)+d(9)+d(12) = 4+3+6 = 13 and h(5, 12, 3) = σ(6)+σ(9)+σ(12) = 13 + 13 + 28 = 53. Given a, b, k you have to calculate g(a, b, k) and h(a, b, k).
Input
The first line of the input file contains an integer T (T ≤ 75) which denotes the total number of test cases. The description of each test case is given below: Three integers in a line. First integer is contains a, second integer is b and third integer is k. You may assume 0 < a ≤ b ≤ 105 , 0 < k < 2000.
Output
For each test case print one line containing g(a, b, k) and h(a, b, k) separated by a space as defined above.
Sample Input
2
5 12 3
1 100 3
Sample Output
13 53
217 3323
source:https://uva.onlinejudge.org/external/120/12043.html
Let us define the functions d(n) and σ(n) as
d(n) = number of divisors of n
σ(n) = summation of divisors of n
Here divisors of n include both 1 and n. For example divisors of 6 are 1, 2, 3 and 6. So d(6) = 4 and σ(n) = 12.
Now let us define two more function g(a, b, k) and h(a, b, k) as
g(a, b, k) = ∑ i d(i)
h(a, b, k) = ∑ i σ(i)
Where a ≤ i ≤ b and i is divisible by k.
For example, g(5, 12, 3) = d(6)+d(9)+d(12) = 4+3+6 = 13 and h(5, 12, 3) = σ(6)+σ(9)+σ(12) = 13 + 13 + 28 = 53. Given a, b, k you have to calculate g(a, b, k) and h(a, b, k).
Input
The first line of the input file contains an integer T (T ≤ 75) which denotes the total number of test cases. The description of each test case is given below: Three integers in a line. First integer is contains a, second integer is b and third integer is k. You may assume 0 < a ≤ b ≤ 105 , 0 < k < 2000.
Output
For each test case print one line containing g(a, b, k) and h(a, b, k) separated by a space as defined above.
Sample Input
2
5 12 3
1 100 3
Sample Output
13 53
217 3323
Solution:
#include <algorithm>
#include <cstdio>
#include <cmath>
#include <cstring>
#include <deque>
#include <fstream>
#include <iostream>
#include <list>
#include <map>
#include <queue>
#include <set>
#include <stack>
#include <string>
#include <vector>
#include<stdio.h>
#define max 100001
using namespace std;
void generate();
long int dividor[max], sumdividor[max];
void generate()
{
long int i, j, k;
for(i=1;i<=max;i++)
{
dividor[i]=1;
sumdividor[i]=1;
}
for(i=2;i<=max;i++)
{
dividor[i]+=1;
sumdividor[i]+=i;
for(j=i+i;j<=max;j=j+i)
{
dividor[j]+=1;
sumdividor[j]+=i;
}
}
}
int main()
{
long int t, a, b, i, j, k, m, div;
long long int sum;
generate();
while(scanf("%ld",&t)==1)
{
for(i=1;i<=t;i++)
{
div=0;
sum=0;
scanf("%ld%ld%ld", &a,&b,&k);
for(j=a;j<=b;j++)
{
if(j%k==0)
{
div+=dividor[j];
sum+=sumdividor[j];
}
}
printf("%ld %lld\n", div, sum);
}
}
return 0;
}
No comments:
Post a Comment
Write your comment - Share Knowledge and Experience