zoukankan      html  css  js  c++  java
  • hdu2964-Prime Bases

    http://acm.hdu.edu.cn/showproblem.php?pid=2964

    题意,给你一个整数n,现在要你分解成 n = k1 * ( 2 * 3 * ....*x1 ) + k2 * ( 2 * 3 * .... *x2 ) + ........;其中后面均为素数,且是由最小的2递增相乘;

    分析:首先打印素数表;然后使用数组a【】来储存到从第一个素数2到第几个素数乘积。找到第i个小于n,第i +1个大于n的数值 i ;

    然后分解n.使用数组b【】来储存a【i】的个数;同理执行多次,知道将n分解完毕;

    如下的这种输出格式比较好,大家可以参考下;

    参照做的;

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<cmath>
    #include<algorithm>
    #include<bitset>
    #include<iomanip>
    
    using namespace std;
    const int prime[]={2,3,5,7,11,13,17,19,23,29,31,37,39,41,43,47,51,53,57,59};  
    __int64 a[21];  
    int b[21],rem; 
    
    void init( )
    {
    	a[ 0 ] = 1 ;
    	for( int i =1 ; i < 21 ; ++i )
    		a[ i ] = a[ i - 1 ] * prime[ i - 1 ] ;
    }
    
    void deal( int n )
    {
    	int i ;
    	for( int i = 0 ; i < 21 ; ++i )
    	{
    		if( a[ i ] <= n && a[ i + 1 ] > n )
    		{
    			rem = i ;
    			break ;
    		}
    	}
    	memset( b , 0 ,sizeof( b ) ) ;
    	for( int i = rem ; i >=0 ; --i )
    	{
    		b[ i ] = n / a[ i ] ;
    		n %= a[ i ] ;
    	}
    }
    
    void output( int n )
    {
    	cout << n << " = " ;
    	for( int i = 0 ; i <= rem ; ++i )
    	{
    		
    		if( b[ i ] )
    		{
    			cout << b[ i ] ;
    			for( int j = 0 ; j < i ; ++j )
    				cout << "*" << prime[ j ] ;
    			if( i != rem )
    				cout << " + " ;
    		}
    	}
    	cout << endl ;
    }
    
    int main( )
    {
    	init( ) ;
    	int n ;
    	while( cin >> n , n )
    	{
    		deal( n ) ;
    		output( n );
    	}
    	return 0 ;
    }
    


  • 相关阅读:
    mysql主从复制
    gitlab安装
    nginx新加模块编译
    flask编写prometheus采集指标脚本
    powerdns的安装
    grafana中prometheus的查询语句
    python编写prometheus的监控指标
    maven常用命令参数
    flask架构中的方法学习
    Java命名规范
  • 原文地址:https://www.cnblogs.com/dyllove98/p/3206309.html
Copyright © 2011-2022 走看看