CS 100: Section Assignment S2
Solutions
// S2_1 Confirm that the next integer beyond (sqrt(3)+1)^(2n) is
// divisible by 2^(n+1).
import java.io.*;
public class S2_1
{
public static void main(String args[])
{
int n;
double x; // (sqrt(3)+1)^(2n)
long xNext; // ceil(x)
long twoPower; // 2^(n+1)
long rem; // remainder when xNext is divided by twoPower
TokenReader in = new TokenReader(System.in);
// Method 1
System.out.println(" n (sqrt(3)+1)^(2n) 2^(n+1) Remainder");
System.out.println("------------------------------------------------");
for (n=1;n<=15;n++)
{
x = Math.ceil(Math.pow(Math.sqrt(3.0)+1.0,2.0*n));
xNext = (long) x;
twoPower = (long) Math.pow( 2,n+1);
rem = xNext%twoPower;
Format.print(System.out," %2d",n);
Format.print(System.out," %20d",xNext);
Format.print(System.out," %10d",twoPower);
Format.println(System.out," %5d",rem);
}
// Method 2
final double factor = 4.0 + 2.0*Math.sqrt(3); // (sqrt(3)+1)*(sqrt(3)+1) = 4+2*sqrt(3)
System.out.println("\n\n n (sqrt(3)+1)^(2n) 2^(n+1) Remainder");
System.out.println("------------------------------------------------");
x = 1.0;
twoPower = 2;
for (n=1;n<=15;n++)
{
x = x*factor ;
xNext = (long) x+1;
twoPower = 2*twoPower;
rem = xNext%twoPower;
Format.print(System.out," %2d",n);
Format.print(System.out," %20d",xNext);
Format.print(System.out," %10d",twoPower);
Format.println(System.out," %5d",rem);
}
// Wait for user to enter input to ensure console window remains visible
in.waitUntilEnter();
}
}
// S2_2: Trinkets
import java.io.*;
import java.awt.*;
public class CUCSDrawing extends Frame
{
final int hc = 400;
final int vc = 300; // The circle center = (hc,vc).
final int r1 = 200; // The large circle radius.
final int r2 = 20; // The radius of the small circles.
final int n = 16; // The number of pearls.
public void paint(Graphics g)
{
// -------------------------------
int h,v; // (h,v) = center coordinates of the kth pearl.
double theta; // The spacing angle 2pi/n.
int k; // index
g.drawOval(hc-r1,vc-r1,2*r1,2*r1); // Draw the circle.
theta = 2*Math.PI/n;
for (k=0;k<=n-1;k=k+1)
{
h = (int)(hc + r1*Math.cos(k*theta));
v = (int)(vc - r1*Math.sin(k*theta));
if (k%2==0)
{
g.fillOval(h-r2,v-r2,2*r2,2*r2);
}
else
{
g.fillRect(h-r2,v-r2,2*r2,2*r2);
}
}
// --------------------------------------
}
}
public class S2_2
{
public static void main(String args[])
{
CUCSDrawing d = new CUCSDrawing();
d.resize(1000,800);
d.move(0,75);
d.setTitle("S2_2");
d.show();
d.toFront();
}
}
// S2_3
import java.io.*;
public class S2_3
{
public static void main(String args[])
{
final int kmax=20; // index of the last Fibonacci number printed
int k; // index of the current Fibonacci number
long z; // the current Fibonacci number
long y; // the "parent" of z.
long x ; // the "grandparent" of z.
TokenReader in = new TokenReader(System.in);
x = 0;
y = 1;
z = 1;
for(k=1;k<=kmax;k=k+1)
{
System.out.println(" " + k + " " + z);
x = y;
y = z;
z = x + y;
}
// Using a while loop...
x = 0;
y = 1;
z = 1;
k = 1;
while (k<=kmax)
{
System.out.println(" " + k + " " + z);
x = y;
y = z;
z = x + y;
k = k+1;
}
// Printing all Fibonacci numbers strictly less than a billion
x = 0;
y = 1;
z = 1;
k = 1;
while (z<=1000000000)
{
System.out.println(" " + k + " " + z);
x = y;
y = z;
z = x + y;
k = k+1;
}
in.waitUntilEnter();
}
}
// S2_4 Counting integers that have a specified property.
import java.io.*;
public class S2_4
{
public static void main(String args[])
{
TokenReader in = new TokenReader(System.in);
int k; // Index
// A type A integer is not divisible by 2,3,5, or 7.
int countA = 0; // Keeps track of the number of type A integers.
for (k=1;k<=1000000;k=k+1)
{
if((k%2!=0) && (k%3!=0) && (k%5!=0) && (k%7!=0))
{
// k is not divisible by 2,3,5,or 7
// i.e., k is indivisible by 2 AND 3 AND 5 AND 7
countA = countA+1;
}
}
System.out.println("Number of type A numbers <= a million = " + countA);
// A type B integer has the property its one place value, its tens place value and
// its hundreds place value are not distinct. Thus, 9123 is not a type B integer but
// 17226 is.
int countB = 0; // Keeps track of the type B integers.
int U,T,H; // For the ones, tens, and hundreds digit.
for (k=100;k<=999;k=k+1)
{
U = k%10;
T = (k/10)%10;
H = k/100;
if((U==T) || (U==H) || (H==T))
{
// The three digits that make up k are NOT distinct.
// i.e., Either U and T are the same OR U and H are the same OR H and T are the same.
countB = countB+1;
}
}
System.out.println("Number of type B numbers in the interval [100,999] = " + countB);
in.waitUntilEnter();
}
}