Pagini recente » Cod sursa (job #1004956) | Cod sursa (job #832132) | Cod sursa (job #1460811) | Cod sursa (job #1304864) | Cod sursa (job #3304987)
#include <fstream>
#include <vector>
#include <string.h>
using namespace std;
ifstream cin("mins.in");
ofstream cout("mins.out");
int lin, col;
int ciur[1005];
vector<int> primes;
void generare_ciur(){
for(int i=2;i<=1000;i++){
ciur[i]=true;
}
for(int i=2;i<=1000;i++){
if(ciur[i]==true){
for(int j=2*i;j<=1000;j+=i){
ciur[j]=false;
}
primes.push_back(i);
}
}
}
long long pinex(long long A, long long B){
vector<long long> fact;
int d=0;
while(d<primes.size()&&primes[d]*primes[d]<=A){
if(A%primes[d]==0){
fact.push_back(primes[d]);
while(A%primes[d]==0){
A=A/primes[d];
}
}
d++;
}
if(A>1){
fact.push_back(A);
}
int k=fact.size();
long long ans=B;
for(int mask=1;mask<(1<<k);mask++){
long long p=1;
int cnt=0;
for(int i=0;i<k;i++){
if(mask&(1<<i)){
p=p*fact[i];
cnt++;
}
}
if(cnt%2==0){
ans+=B/p;
}
else{
ans-=B/p;
}
}
return ans;
}
int main(){
cin>>lin>>col;
long long ans=0;
for(int i=1;i<lin;i++){
ans+=pinex(i, col-1);
}
cout<<ans;
}