zoukankan      html  css  js  c++  java
  • Meow Factor 【暴力】

    题目链接

    Meow Factor

    题目

    Among many of the Catland club kittens it is important to keep a paw on the pulse of the latest fashions and trends in order to stay hip. When a new number is discovered in Catland, its coolness is primarily determined by its meow factor. For a positive integer n, its meow factor is the largest integer m such that n is evenly divisible by m nine times (once for each life of a cat). We say that n is divisible by m nine times if, starting with n, you can divide it by m without a remainder, take the result of the division and again divide it by m without a remainder, and so on, dividing by m nine times in total.
    While some cats are naturally chic and have an innate ability to see the meow factor of numbers, others who struggle to stay in vogue can not even tell the difference between 3584 and 4711 (the former clearly having a higher meow factor). Can you help those poor unfortunate cats lacking a sense of style, by writing a program to determine the meow factor of a number?

    Input
    The input contains a single integer (n (1≤n≤26^3−1)).

    Output
    Output the meow factor of n.

    大概意思就是 给你一个数n,你要求出一个数m,m是能够让 ((n/m)/m...)这样除以m 九次并且,每次都没有余数 的最大数。

    思路

    • 一开始是想把n合数分解,然后找到最大的m,但是tle了
    • 然后搜题解发现根本不需要合数分解为质数!只要枚举就好了!
    • 注意,不是找指数大于9最大的,而是所有指数是9的倍数的,每个都要相乘,假如(3^{12}*4^{20}),则需要(3*4*4)

    代码

    • 注释掉的大段代码是之前tle的合数分解
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    ll n;
    const int MAXN=100000;
    /*int prime[MAXN+2];
    void getPrime()
    {
    	memset(prime,0,sizeof(prime));
    	for(int i=2;i<=MAXN;i++)
    	{
    //		printf("i:%d
    ",i);
    		if(!prime[i]) prime[++prime[0]]=i;
    		for(int j=1;j<=prime[0]&&prime[j]<=MAXN/i;j++)
    		{
    			prime[prime[j]*i]=1;
    			if(i%prime[j]==0) break;
    		}
    	}
    }
    ll factor[100][2];
    int fatCnt;*/
    /*void getFactors( ll x)
    {
    	fatCnt=0;
    	ll tmp=x;
    	for(int i=1;prime[i]<=tmp/prime[i];i++)
    	{
    		if(tmp%prime[i]==0)
    		{
    			factor[fatCnt][0]=prime[i];
    			while(tmp%prime[i]==0)
    			{
    				factor[fatCnt][1]++;
    				tmp/=prime[i];
    			}
    			fatCnt++;
    		}
    	}
    	if(tmp!=1)
    	{
    		factor[fatCnt][0]=tmp;
    		factor[fatCnt++][1]=1;
    	}
    }*/
    map<ll,ll> getFactors(ll x)
    {
    	map<ll,ll> m;
    	for(ll i=2;i<=min((ll)sqrt(x),1ll*MAXN);i++)
    	{
    		while(x%i==0)
    		{
    			m[i]++;
    			x/=i;
    		}
    	}
    	if(x>1)
    		m[x]++;
    	return m;
    }
    int main()
    {
    	scanf("%lld",&n);
    	map<ll,ll> m = getFactors(n);
    	ll mx=1;
    	ll t;
    	for(auto & i: m)
    	{
    		while(i.second >=9)
    		{
    			i.second-=9;
    			mx *= i.first;
    		}
    	 } 
    	printf("%lld
    ",mx);
    	return 0;
     } 
    
  • 相关阅读:
    输入一个nxn矩阵各元素的值,球出两条对角线元素之和
    打印杨辉三角
    编写一个函数,实现两个字符串的连接功能
    字符串置换。将字符串s中的出现的字符s1用字符s2置换
    有一行文字,要求删去其中某个字符
    自定义函数delstr()的功能是删去字符串s1中所有的"*"
    用微软的kestrel在Linux上利用Apache架设Asp.Net Core环境
    2012年8月14日 星期二 equals()方法 (冲突备份)
    jquery 操作DOM 案例
    FileUpload 控件上传图片和文件
  • 原文地址:https://www.cnblogs.com/xuwanwei/p/12879736.html
Copyright © 2011-2022 走看看