# Prime Factorization# Number Theory# Math

f586 - 數字D×D

🔗 前往 ZeroJudge 原題

題目描述

題目要求將輸入的數字進行質因數分解,並根據分解結果進行分類。如果數字為 1,則輸出 1。如果數字沒有平方數因數,則輸出 (-1)^k,其中 k 是質因數的個數。否則,輸出 0。

解題思路

對於每個輸入數字 n,首先檢查是否為 1。如果是,則輸出 1。否則,嘗試從 2 開始迭代到 sqrt(n),並進行質因數分解。在分解過程中,記錄質因數的個數。如果發現某個質因數出現了兩次或更多次(即存在平方數因數),則直接輸出 0。如果質因數分解完成且沒有發現平方數因數,則根據質因數的個數 k,輸出 (-1)^k。

複雜度分析

  • 時間複雜度: O(sqrt(n))
  • 空間複雜度: O(1)

程式碼

#include <iostream>
#include <cmath>
using namespace std;
int n,v;
int main(){
	cin.tie(0); ios::sync_with_stdio(false);
	cin >> n;
	for(int i=0;i<n;++i){
		cin >> v;
		if(v==1){
			cout << "1\n";
		}
		else{
			int ans=0,z=1;
			for(int j=2;j<=sqrt(v)&&z;++j){
				if(v%j==0){
					++ans;
					v/=j;
				}
				if(v%j==0){
					z=0;
				}
			}
			if(z){
				if(ans%2){
					cout << "1\n";
				} 
				else{
					cout << "-1\n";
				}
			}
			else{
				cout << "0\n";
			}
		} 
	}
}

Discussion