#include <math.h>
#include <stdio.h>
int main() {
int n;
int prime=2;
scanf("%d",&n);
while(prime<=sqrt(n)){
while(n%prime!=0){
prime++;
if(prime>sqrt(n)){
printf("%d ",n);
return 0;
}
}
n=n/prime;
printf("%d ",prime);
}
if(prime>sqrt(n)){
printf("%d ",n);
return 0;
}
return 0;
} #include <math.h>
#include <stdio.h>
int main() {
int num;
/* prime 初始值为2 */
int prime = 2;
/* 输入值 */
scanf("%d", &num);
while (prime <= sqrt(num)) {
/* prime试探法,如果num不能整除,就代表prime不为因数 */
if ( 0 != (num % prime)) {
prime++;
}
/* 如果num不能整除,就代表prime为因数 */
/* 1、打印因数 */
/* 2、更新num的值 */
else {
printf("%d ", prime);
num /= prime;
prime = 2;
}
/* 如果prime已经大于sqrt(num),就代表num本身为一个超大的质数,直接输出 */
if (prime > sqrt(num)) {
printf("%d ", num);
}
}
}
#include <stdio.h>
// 提前算出取0到1000的质数。
const int prime_list[168]={2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997};
int main() {
int a;
while (scanf("%d",&a) != EOF)
{
int x=0;
while(a>1)
{
int found=0;
for(int i=x;i<168;i++)
{
const int pn=prime_list[i];
if((a%pn)==0)
{
a/=prime_list[i];
printf("%d ",prime_list[i]);
x=i;
found=1;
break;
}
}
if(!found)
{
printf("%d ",a);
break;
}
}
}
return 0;
} #include <math.h>
#include <stdio.h>
int main() {
int input = 0;
scanf("%d",&input);
int temp1 = 2, temp2 = input;
while(temp2 !=1)
{
if(temp1 > sqrt(temp2))
temp1 = temp2;
if(temp2%temp1 == 0)
{
printf("%d ",temp1);
temp2 = temp2/temp1;
}
else
{
temp1++;
}
}
return 0;
} #include <stdio.h>
#include <stdbool.h>
int InputNum = 0;
bool IsPrime(int Num)
{
bool ret = true;
if(2 == Num)
return ret;
if(0 == (Num %2))
return false;
for(int i = 2;i < Num && (i * i <=Num);i++)
{
if(0 == (Num % i))
{
ret = false;
break;
}
}
return ret;
}
int FindOnePrimeNum(int m)
{
if(IsPrime(m))
{
printf("%d",m);
return -1;
}
else{
for(int i = 2;i <= m;i++)
{
if(!IsPrime(i))
continue;
if(0 == (m % i))
{
printf("%d ",i);
return FindOnePrimeNum(m/i);
}
}
}
return -1;
}
int main() {
scanf("%d",&InputNum);
FindOnePrimeNum(InputNum);
} //难点在于减少循环次数,循环到输入的平方根结束,这样可以减少循环次数
#include <stdio.h>
#include <math.h>
int deter(int num)
{
if(num == 1)
{
return 0;
}
int j;
for(j = 2; j <= sqrt(num); j++)
{
if(num % j == 0)
{
return 0;
}
}
return 1;
}
int main() {
int num;
int i;
int temp;
scanf("%d", &num);
temp = num;
for(i = 2; i <= sqrt(num); )
{
if(temp % i == 0 && deter(i))
{
printf("%d ", i);
temp = temp / i;
}
else
{
i++;
}
}
if(deter(num))
{
printf("%d ", num);
}
else if(deter(temp))
{
printf("%d ", temp);
}
return 0;
}