素数
Description
prime (prim) n.[ME, fr. MF, fem. of prin first, Lprimus; akin to Lprior] 1 :first in time: original 2 a :
having no factor except itself and one 3 is a number b :
having no common factor except one 12 and 25 are relatively 3
a : first in rank, authority or significance :principal b : having the highest quality or value television
time [from Webster's New Collegiate Dictionary]
The most relevant definition for this problem is 2a: An integer g>1 is said to be prime if and only if its only positive divisors are itself and one (otherwise it is said to be composite). For example, the number 21 is composite;
the number 23 is prime. Note that the decompositon of a positive number g into its prime factors, i.e.,
is unique if we assert that fi > 1 for all i and for i<j.
One interesting class of prime numbers are the so-called Mersenne primes which are of the form 2p- 1. Euler proved that 231 - 1 is prime in 1772 -- all without the aid of a computer.
Input
The input will consist of a sequence of numbers. Each line of input will contain one number g in the range -2 31 < g <2 31, but different of -1 and 1. The end of input will be indicated by an input line having a value of zero.Output
For each line of input, your program should print a line of output consisting of the input number and its prime factors. For an input number , where each fi is a prime number greater than unity (with for i< j), the format of the output line should be
When g < 0, if , the format
of the output line should be
Sample Input
-190 -191 -192 -193 -194 195 196 197 198 199 200 0
Sample Output
-190 = -1 x 2 x 5 x 19 -191 = -1 x 191 -192 = -1 x 2 x 2 x 2 x 2 x 2 x 2 x 3 -193 = -1 x 193 -194 = -1 x 2 x 97 195 = 3 x 5 x 13 196 = 2 x 2 x 7 x 7 197 = 197 198 = 2 x 3 x 3 x 11 199 = 199 200 = 2 x 2 x 2 x 5 x 5
Miguel Revilla
2000-05-19
#include <iostream> #include <stdio.h> #include <cmath> using namespace std; int main() { long long int n; while (scanf("%lld",&n) && n) { if (n <0) { n = -n; cout << "-"<< n<< " = -1 x "; } else { cout << n << " = "; } long long int k = sqrt((double) n); for (long long int i=2; i<=k; i++) { if (n %i==0) { n = n/i; cout << i<< " x "; i = 1; k = sqrt((double) n); } } cout << n<< endl; } return 0; }