#include <iostream>
#include <cmath>
using namespace std;
long divider(long n, long fromWhen) {
long p=fromWhen;
long sqrn = sqrt(n);
while(p<=sqrn)
{
if(n%p==0) return p;
p++;
}
return 0;
}
int main(){
long n,output=0;
cin >> n;
//---for a=1
long temp_n=n-1,p,q,d=2,da=1,dividerNumber=0,dividerEqual2=0,dividerEqualQ=0,a=1;
while(a!=0)
{
a=divider(n,da);
if(a==0) break;
// cout << "a " <<a<<endl;
temp_n=(n-a)/a;
// cout <<"temp_n" << temp_n<<endl;
dividerNumber=0;
dividerEqual2=0;
dividerEqualQ=0;
da=a+1;
p=1;
d=2;
while(p!=0){
p=divider(temp_n,d);
if(p==2) dividerEqual2=1;;
if(p == 0) break;
if(temp_n/p ==p )dividerEqualQ=1;
// cout<<" p= "<<endl;
//temp_n/=p;
d=p+1;
dividerNumber++;
// cout<<" p= "<<p <<" temp_n=" << temp_n << " dividerNumer =" <<dividerNumber<<endl;
}
// dividerNumber++;
// cout <<"how many dividers"<<dividerNumber<<endl;
output+=2*dividerNumber-dividerEqual2-dividerEqualQ;
//---for a>1
a=n/a;
temp_n=(n-a)/a;
// cout <<"temp_n" << temp_n<<endl;
dividerNumber=0;
dividerEqual2=0;
dividerEqualQ=0;
p=1;
d=2;
while(p!=0){
p=divider(temp_n,d);
if(p==2) dividerEqual2=1;;
if(p == 0) break;
if(temp_n/p ==p )dividerEqualQ=1;
// cout<<" p= "<<endl;
//temp_n/=p;
d=p+1;
dividerNumber++;
// cout<<" p= "<<p <<" temp_n=" << temp_n << " dividerNumer =" <<dividerNumber<<endl;
}
// dividerNumber++;
// cout <<"how many dividers"<<dividerNumber<<endl;
output+=2*dividerNumber-dividerEqual2-dividerEqualQ;
//---for a>1
}
// cout<<"i=" <<" test"<< n << "divider = "<< divider(n,2)<<endl;
// cout <<"output = " << output << endl;
cout<<output<<endl;
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 | #include <iostream> #include <cmath> using namespace std; long divider(long n, long fromWhen) { long p=fromWhen; long sqrn = sqrt(n); while(p<=sqrn) { if(n%p==0) return p; p++; } return 0; } int main(){ long n,output=0; cin >> n; //---for a=1 long temp_n=n-1,p,q,d=2,da=1,dividerNumber=0,dividerEqual2=0,dividerEqualQ=0,a=1; while(a!=0) { a=divider(n,da); if(a==0) break; // cout << "a " <<a<<endl; temp_n=(n-a)/a; // cout <<"temp_n" << temp_n<<endl; dividerNumber=0; dividerEqual2=0; dividerEqualQ=0; da=a+1; p=1; d=2; while(p!=0){ p=divider(temp_n,d); if(p==2) dividerEqual2=1;; if(p == 0) break; if(temp_n/p ==p )dividerEqualQ=1; // cout<<" p= "<<endl; //temp_n/=p; d=p+1; dividerNumber++; // cout<<" p= "<<p <<" temp_n=" << temp_n << " dividerNumer =" <<dividerNumber<<endl; } // dividerNumber++; // cout <<"how many dividers"<<dividerNumber<<endl; output+=2*dividerNumber-dividerEqual2-dividerEqualQ; //---for a>1 a=n/a; temp_n=(n-a)/a; // cout <<"temp_n" << temp_n<<endl; dividerNumber=0; dividerEqual2=0; dividerEqualQ=0; p=1; d=2; while(p!=0){ p=divider(temp_n,d); if(p==2) dividerEqual2=1;; if(p == 0) break; if(temp_n/p ==p )dividerEqualQ=1; // cout<<" p= "<<endl; //temp_n/=p; d=p+1; dividerNumber++; // cout<<" p= "<<p <<" temp_n=" << temp_n << " dividerNumer =" <<dividerNumber<<endl; } // dividerNumber++; // cout <<"how many dividers"<<dividerNumber<<endl; output+=2*dividerNumber-dividerEqual2-dividerEqualQ; //---for a>1 } // cout<<"i=" <<" test"<< n << "divider = "<< divider(n,2)<<endl; // cout <<"output = " << output << endl; cout<<output<<endl; return 0; } |
English