Think about Euler's totient function:
Euler's totient function, also known as phi-function Ï•(n), counts the number of integers between 1 and n inclusive, which are coprime to n. Two numbers are coprime if their greatest common divisor equals 1 (1 is considered to be coprime to any number).
///Bismillahir Rahmanir Rahim
///Author: Tanvir Ahmmad
///CSE, Islamic University,Bangladesh
#include<iostream>
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<string>
#include<cstring>
#include<sstream>
#include<cmath>
#include<cstring>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<vector>
#include<iterator>
#include <functional> ///sort(arr,arr+n,greater<int>()) for decrement of array
/*every external angle sum=360 degree
angle find using polygon hand(n) ((n-2)*180)/n*/
///Floor[Log(b) N] + 1 = the number of digits when any number is represented in base b
using namespace std;
typedef long long ll;
typedef long long unsigned llu;
int phi[5000009];
llu sum[5000009];
void kept()
{
for (ll i=1; i<=5000000; i++)
phi[i] = i;
for(ll i=2; i<=5000000; i++)
if(phi[i]==i)
for(ll j=i; j<=5000000; j+=i)
phi[j]-=(phi[j]/i);
}
void cnt()
{
sum[1]=0;
for (int i=2; i <=5000000; i++)
{
sum[i] = phi[i];
sum[i]*=phi[i];
sum[i]+=sum[i-1];
}
}
int main()
{
kept();
cnt();
int a,b,ans,tst,ca=1;
scanf("%d",&tst);
for(ll i=1;i<=tst;i++)
{
ans=0;
scanf("%d%d",&a,&b);
printf("Case %d: %llu\n",ca++,sum[b]-sum[a-1]);
}
return 0;
}
///Alhamdulillah
Problem Link:https://lightoj.com/problem/mathematically-hard
Comments
Post a Comment