Pagini recente » Cod sursa (job #1221385) | Cod sursa (job #2071633) | Cod sursa (job #2188775) | Cod sursa (job #1219844) | Cod sursa (job #2090131)
///ca si exercitiu de folosire a instructiunii define acest algoritm va contine oink in loc de oink
#include<bits/stdc++.h>
using namespace std;
#define oink int
ifstream f("pascal.in");
ofstream g("pascal.out");
oink r, d;
oink v1[5000002], v2[5000002];
oink main() {
f>>r>>d;
if(d!=4 && d!=6) {
for(oink i=d; i<=r; i+=d) {
oink z=i;
while(z%d==0) {
v1[i]++;
z/=d;
}
}
for(oink i=1; i<=r; i++){
v1[i]+=v1[i-1];
}
oink cont=0;
oink max1=r/2+r%2;
for(oink i=0; i<max1; i++){
if(v1[r]-v1[i]-v1[r-i]){
cont+=2;
}
}
if(r%2==0){
if(v1[r]-v1[r/2]*2){
cont++;
}
}
g<<cont;
} else if(d==4) {
for(oink i=2; i<=r; i+=2) {
oink z=i;
while(z%2==0) {
v1[i]++;
z/=2;
}
}
for(oink i=1; i<=r; i++){
v1[i]+=v1[i-1];
}
oink cont=0;
oink max1=r/2+r%2;
for(oink i=0; i<max1; i++) {
oink nr=v1[r]-v1[i]-v1[r-i];
if(nr>=2){
cont+=2;
}
}
oink nr=v1[r]-2*v1[r/2];
if(r%2==0){
if(nr>=2){
cont++;
}
}
g<<cont;
} else {
for(oink i=2; i<=r; i+=2) {
oink z=i;
while(z%2==0) {
++v1[i];
z/=2;
}
}
for(oink i=3; i<=r; i+=3) {
oink z=i;
while(z%3==0) {
++v2[i];
z/=3;
}
}
for(oink i=1; i<=r; i++){
v1[i]+=v1[i-1];
}
for(oink i=1; i<=r; i++){
v2[i]+=v2[i-1];
}
oink cont=0;
oink max1=r/2+r%2;
for(oink i=0; i<max1; i++) {
oink nr=v1[r]-v1[i]-v1[r-i];
oink nr1=v2[r]-v2[i]-v2[r-i];
if(nr>0 && nr1>0)
cont+=2;
}
oink nr=v1[r]-2*v1[r/2];
oink nr1=v2[r]-2*v2[r/2];
if(r%2==0){
if(nr>0 && nr1>0){
cont++;
}
}
g<<cont;
}
return 0;
}