功能:输入一个正整数,按照从小到大的顺序输出它的所有质因子(重复的也要列举)(如180的质因子为2 2 3 3 5 )
数据范围:
import java.util.*; public class Main{ public static void main(String[] args){ Scanner sc = new Scanner(System.in); while(sc.hasNext()){ long num = sc.nextLong(); long num2 = (long)Math.sqrt(num); for(int i = 2; i <= num2; i++){ while(num % i == 0){ num /= i; System.out.print(i + " "); } } System.out.println(num == 1 ? "" : num + " "); } sc.close(); } }
#include <iostream> using namespace std; int main(void) { long a; int last_base = 3; while (cin>>a) { while (a % 2 == 0) { cout<<"2 "; a = a / 2; } while (a >= last_base) { for (int i = last_base; i <= a; i = i + 2) { if (a % i == 0) { last_base = i; cout<<i<<" "; a = a / i; break; } } } } return 0; }
public static void main(String[] args){ Scanner sc = new Scanner(System.in); long s = sc.nextLong(); int temp = 2; StringJoiner str= new StringJoiner(" "); while(temp<=s){ if(s%temp==0){ if(temp==s){ str.add(temp+""); break; }else{ str.add(temp+""); s=s/temp; } } else { temp++; } } }这个 是啥问题
public static void main(String[] args) { Scanner scanner = new Scanner(System.in); while (scanner.hasNext()){ long num = scanner.nextLong(); if(num <= 3){ System.out.println(num); continue; } for (int i = 2; i <= num; i++) { while (num % i == 0) { System.out.println(i + " "); num /= i; } } } }
#include<iostream> #include<string> using std::cin;using std::cout; using std::endl; int main() { long n; cin>>n; for(int i=2;i<=n;++i) //遍历寻找n的质因子 { while(n%i==0) //i为n的质因子 { cout<<i<<" "; //输出质因子 n/=i; } } return 0; }
#include <stdio.h> #define ARR_LEN 200 #define TABLE_LEN 10000 static char ans[ARR_LEN]; static long numTable[TABLE_LEN] = {2,}; static int numTableLen = 1; char* getResult(long ulDataInput) { int lenAns = 0; memset(ans,0,sizeof(char) * ARR_LEN); while(1 != ulDataInput) { while(0 == ulDataInput%numTable[numTableLen - 1]) { int end = lenAns; long num = numTable[numTableLen - 1]; ans[end] = ' '; end++; while(num) { ans[end] = num%10 + '0'; num = num/10; end++; } for(int i = 0; i < (end - lenAns)/2; i++) { char tmp = ans[lenAns + i]; ans[lenAns + i] = ans[end - 1 - i]; ans[end - 1 - i] = tmp; } lenAns = end; ulDataInput /= numTable[numTableLen - 1]; } if(ulDataInput > numTable[numTableLen - 1]) { for(long i = numTable[numTableLen - 1] + 1; i <= ulDataInput; i++) { int flag = 1; for(int j = 0; j < numTableLen; j++) { if(0 == i%numTable[j]) { flag = 0; break; } } if(flag) { numTable[numTableLen] = i; numTableLen++; break; } } } } ans[lenAns] = '\0'; return ans; } int main() { long n = 0; scanf("%d",&n); printf("%s\n",getResult(n)); return 0; }
import java.util.*; public class Main{ public static void main(String[] args){ List<String> resultList = new ArrayList<String>(); Scanner in = new Scanner(System.in); long num = in.nextLong(); if(num > 2){ while(num%2 ==0){ num /= 2; resultList.add(String.valueOf(2)); } for(int i=3;i<=num;i++){ if(num%i == 0){ num = num/i; resultList.add(String.valueOf(i)); i--; //对i进行重复判断,处理如3*3=9这种情况 } } String result = ""; for(String param:resultList){ result += param + " "; } System.out.println(result); } else{ System.out.println(num); } } }
//第一次用递归解决了问题,纪念一哈
#include<stdio.h>
int z(long);//判断质数 int z(long a)
{
for(int i=2;i<a;i++)
{
if(a%i==0)
return 0;
}
return 1;
}
void y(long);//递归找因子
void y(long a)
{
int k=2;
while(a%k!=0&&k<a){
k++;
}
if(z(k)==1) printf("%d ",k);
if(k<a) y(a/k);
}
int main()
{
long x;
while(scanf("%d",&x)!=EOF){
y(x);
}
return 0;
}