#include <stdio.h> #include <string.h> #define N 100 int main() { long i; int j; long n; char over; long devisor[N]; scanf("%ld", &n); j = 0; while(1){ over = 1; for(i=2 ; i<=(n+1)/2 ; i++){ if(n%i == 0){ devisor[j++] = i; n /= i; over = 0; break; } } if(over) break; } for(i=0 ; i<j ; i++){ printf("%ld ", devisor[i]); } printf("%ld \n", n); }
好多人没明白这个问题的意思,其实就是让你把输入的整数因式分解,只不过因子必须都是质数 例如:180 = 2 * 2 * 3 * 3 * 5;90 = 2 * 3 * 3 * 5;而不是找出所有的质数因子 import java.util.Scanner; public class Main { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); long number = 0; while(scanner.hasNextLong()) { number = scanner.nextLong(); isPrimerFactors(number); } } private static void isPrimerFactors(long num) { long number = num; while(number != 1) { for(int i = 2; i <= number ;i++) { if(number % i == 0) { number /= i; System.out.print(i + " "); break; } } } } }
num = int(input()) fac = [] if num>=2: #如果输入为1,则没有质因子。所以只需要考虑输入大于等于2. i=2; while i<= int(num**0.5)+1: # 对于输入num,我们只需要搜索至m,使得m^2>=num。再往后仍无质因子说明num本身就是最后一个质因子。 if num%i == 0: fac.append(i) num = num/i # 找到一个质因子后即可减小num。 else: i+=1 fac.append(int(num)) for i in fac: print(i,end=" ")
using System; class Solution { static void Main() { long param =long.Parse(Console.ReadLine()); if(param == 1) Console.Write(""); long temp = param ; for(long k = 2;k<= temp;k++) { if(IsPrime(k)) { while(temp % k== 0) { temp = temp/k; Console.Write(k + " "); } } } //if(IsPrime(param)) Console.WriteLine(param + " "); } public static bool IsPrime(long num) { if(num == 2 || num == 3) return true; if(num %6 != 1 && num % 6 != 5) return false; for(long i = 5;i <= Math.Sqrt(num) ;i+=6) { if(num % i == 0 && num %(i + 2) == 0) return false; } return true; } }
#include<iostream>
#include<string>
#include<math.h>
using namespace std;
bool isPrime(int n)
{
int flag = false;
for (int i = 2; i <= sqrt(n); i++)
{
if (n%i == 0)
return flag;
}
flag = true;
return flag;
}
int main()
{
int n;
while (cin >> n)
{
int m = n;
while (m>1)
{
for (int i = 2; i <= m; i++)
{
if ((m%i == 0) && isPrime(i))
{
cout << i << " ";
m = m / i;
break;
}
}
}
}
return 0;
}
#include <iostream> #include <math.h> using namespace std; int main() { long int input; //方法一 //while (cin >> input) //{ // while (input != 1) // { // for (int i = 2; i <= input; i++) // { // if (input % i == 0) // { // input /= i; // cout << i << ' '; // break; //只要能被i整除,i总是从2开始 // } // } // } //} //方法二 //while (cin >> input) //{ // for (int i = 2; i <= input; i++) // { // //只要能被i整除,i总是从2开始 // if (input%i == 0) // { // input /= i; // cout << i << " "; // i = 1;//经i++之后 i又变为2开始 // } // } //} //方法三 while (cin >> input) { for (int a = 2; a<= sqrt(input); a++) { //此处是while,把a整除结束才可加1 while (input%a == 0) { cout << a << ' '; input = input / a; } } if (input>1) cout << input << ' '; } //system("pause"); return 0; }
#一个整数x的质因子的求法: # step1:在2~x^0.5上,从2开始除x,如果能整除,记录下这个除数,然后用商去继续进行上述的操作,直到商为1; # step2:如果除不进,除数加一。如果一直加一,除数大于x^0.5,则说明x的质因子只有它本身。 # 被除数 ÷ 除数=商···余数 def FindPrimeNumber(num): lst = [] i = 2 #从2开始除num while num != 1: #商不等1时 if num % i == 0: lst.append(i) #如果能整除,记录下这个除数i num //= i #更新num,num = 商 else: #如果num除以i除不尽 if i>int(num**0.5): #当i大于根号num时,说明num的质因子只有它本身,此时结束循环 lst.append(num) break else: i+=1 #除数i+1 for item in lst: print(item,end=' ') if __name__=='__main__': x = int(input()) FindPrimeNumber(x)