#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; }