zoukankan      html  css  js  c++  java
  • CF-div2-630-B

    思路

    1.一个数字能够分解成有限个素数的乘积 —— 唯一分解定理。

    2.题目中给出的数是Composite,能分解成两个数的乘积(it can be represented as a product of two positive integers)。这个小于1000的Composite数分解的一个素数肯定<=31,因为平方小于1000的数分解完只有11个质因数,31*31=961;(31是第11个素数)。

    3.所以只要把最小质因子相同的归为一类即可,根据(2)最后分类数一定小于等于11,满足题目要求。

    代码

    #include<bits/stdc++.h>
    using namespace std;
    const int maxn = 1100;
    int t,n;
    int a[maxn];
    int prime[11] = {2,3,5,7,11,13,17,19,23,29,31};
    int vis[11];
    map<int,int > mp;
    
    //1.一个数字能够分解成若干个素数的乘积——唯一分解定理
    //2.小于1000的Composite数 质因子一定有一个是小于等于31的 
    //3.所以只要把最小质因子相同的归为一类即可,根据(2)最后分类数一定小于11 
    
    void solve(){
    	cin>>n;
    	for(int i=1;i<=n;i++) cin>>a[i];
    	for(int i=0;i<11;i++) vis[i] = 0; 
    	int cnt = 0;
    	for(int i=1;i<=n;i++){
    		for(int j=0;j<11;j++){
    			if(a[i] % prime[j] == 0){
    				if(vis[j]==0) vis[j] = ++cnt;
    				mp[i] = vis[j];
    				break;
    			}
    		}
    	} 
    	cout<<cnt<<endl;
    	for(int i=1;i<=n;i++){
    		cout<<mp[i]<<" ";
    	}
    	cout<<endl;
    }
    
    int main(){
    	cin>>t;
    	while(t--){
    		solve();
    	}	
    	return 0;
    }
    
    
  • 相关阅读:
    用DECODE进行排序
    linux下批量替换文件内容
    Linux下chkconfig命令详解
    linux 命令参数列表过长以及find用法
    参数上使用自定义注解在aop中无法获取到该参数
    AOP
    AOP aspect XML 配置
    AOP前世与今生,aspect
    ETL工具之——kettle使用简介
    ETL工具之kittle使用案例整理
  • 原文地址:https://www.cnblogs.com/fisherss/p/12610766.html
Copyright © 2011-2022 走看看