Pagini recente » Cod sursa (job #1655207) | Cod sursa (job #3193547) | Cod sursa (job #1699222) | Cod sursa (job #2644084) | Cod sursa (job #12496)
Cod sursa(job #12496)
#include <stdio.h>
FILE *f = fopen("pascal.in","rt"), *g = fopen("pascal.out","wt");
long int div[50][3],n,i,j,k,m,nrc,nrd,sol;
void citire()
{
fscanf(f,"%ld %ld",&n,&m);
long int x,d;
x=m;
d=2;
k=1;
while (x>1)
{
while (x%d==0) {div[k][1]++;x/=d;}
if (div[k][1]) {div[k][0]=d;k++;}
d++;
}
nrd=k-1;
x=n;
for (i=1;i<=nrd;i++)
{
while (x%div[i][0]==0) {div[i][2]++;x/=div[i][0];}
if (x==1) break;
}
}
int verif()
{
long int i;
for (i=1;i<=nrd;i++)
if (div[i][1]>div[i][2]) return 0;
return 1;
}
void solve()
{
sol+=verif()*2;
long int x;
for (k=1;k<=n/2-1;k++)
{
x=n-k;
for (i=1;i<=nrd;i++)
{
while (x%div[i][0]==0) {div[i][2]++;x/=div[i][0];}
if (x==1) break;
}
x=k+1;
for (i=1;i<=nrd;i++)
{
while (x%div[i][0]==0) {div[i][2]--;x/=div[i][0];}
if (x==1) break;
}
if (k+1<n/2) sol+=verif()*2;
else sol+=verif();
}
fprintf(g,"%ld",sol);
}
int main()
{
citire();
solve();
fclose(f);
fclose(g);
return 0;
}