Mai intai trebuie sa te autentifici.
Cod sursa(job #3304987)
| Utilizator | Data | 29 iulie 2025 12:00:59 | |
|---|---|---|---|
| Problema | Mins | Scor | 0 |
| Compilator | cpp-64 | Status | done |
| Runda | Arhiva de probleme | Marime | 1.37 kb |
#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;
}
