// created with Asymptote 2.47
import graph;
import settings;
outformat="pdf";
unitsize(6.2mm);
int z_start = 0; // start value for drawing graph of function Q(z)
int z_end = 9; // end value for drawing graph of function Q(z)
// calculate the digit sum of the given number
// Parameters: n ... integer number
// Returns: digit sum of n;
// 0 if n equals 0; negative if n < 0; positive if n > 0;
// => digitSum(-n) = -digitSum(n)
//
int digitSum(int n=0) {
int sign = sgn(n);
n = abs(n);
string n_str = (string)n;
string[] n_arr = array(n_str);
int sum = 0;
for (int i = 0; i < n_arr.length; ++i) {
sum += (int)(n_arr[i]);
}
return (sign * sum);
}
// calculate the digit sum of the doubled given number
// Parameters: n ... integer number
// Returns: digit sum of 2*n;
// 0 if n equals 0; negative if n < 0; positive if n > 0;
// => Q(-n) = -Q(n)
//
int Q(int n=0) {
return digitSum(2*n);
}
// draw graph of function Q(z)
pen graphPen = red + scale(2) * currentpen;
for (int z = z_start; z < (z_end + 1); ++z) {
dot( (z, Q(z)), graphPen );
}
// axes
pen axesPen = gray(0.5) + dashed + linewidth(0.5*linewidth());
xaxis( "$z$",
BottomTop,
LeftTicks(n=1, begin=false, end=false, extend=true, pTick=axesPen) );
yaxis( "$Q(z) = q(2 \cdot z)$",
LeftRight,
RightTicks(n=1, begin=false, end=false, extend=true, pTick=axesPen) );
// label
real pos = (z_end - z_start) / 2.0;
label(scale(2) * "$Q(z)$", (pos, pos), graphPen);