首页 > 其他分享 >牛客周赛Round64-B题题解

牛客周赛Round64-B题题解

时间:2024-10-20 21:20:49浏览次数:7  
标签:周赛 16 int 题解 牛客 Round64 质因数

牛客周赛Round64-B题题解

题目描述:

小红拿到了一个正整数,请你帮小红将其表示为幂(a^b)的形式。

输入描述:

一个正整数
2<=x<=10^5

输出描述:`

第一行输出x。
接下来每一行输出一个幂的表达式。
请按指数从小到大的顺序输出。

示例1

输入

16

输出

16
=16^1
=4^2
=2^4

解题思路:

这是一道思维题。我们拿到这个题首先看到数据范围是(105),也就是O(n2)的算法是肯定过不去的,那我们就需要优化我们的算法。

我们首先来想一个暴力的做法,也就是分别枚举底数a和指数b.

for(int i=1;i<=x;i++)
{
   for(int j=1;j<=x;j++)
   {
      if(pow(i,j)==x)
      {
        cout<<"="<<i<<"^"<<j<<endl;
      }
   }
}

这样是肯定会超时的。

那我们怎么优化呢?

我们先找一下规律,我们会发现底数a一定会是x的质因数,那我们先把x分解质因数。然后再把质因数存到一个数组里面就行了

也就是

 int count=0;

	 for(int i=1;i<=x/i;i++)
	 {
	 	  if(x%i==0)
	 	  {
	 	  	a[++count]=i;
		  }
	 }	
	 
	 
	 a[++count]=x;

指数我们发现,最多也就到根号x,不会比根号x还要大

AC 代码如下:

#include <bits/stdc++.h>
using namespace std;
const int N=1e5+10;
int a[N];
int  x;																																																																																																																						                                                                                                                                                                                                                                                                                                                                                    
int main()
{
	cin>>x;
	 
	 int t=x;
	 
	 int count=0;

	 for(int i=1;i<=x/i;i++)
	 {
	 	  if(x%i==0)
	 	  {
	 	  	a[++count]=i;
		  }
	 }	
	 
	 
	 a[++count]=x;
	 
	 
	 
	 x=t;
	 
	                                                                             
	cout<<x<<endl;
	
	for(int i=count;i>=1;i--)
	{
		for(int j=1;j<=sqrt(x);j++)
		{
			if(pow(a[i],j)==x)
			{
				cout<<"="<<a[i]<<"^"<<j<<endl;
			}
		}
	}

	
	             

	
	return 0;
}

标签:周赛,16,int,题解,牛客,Round64,质因数
From: https://www.cnblogs.com/xie-blog/p/18487933

相关文章

  • 【秋招笔试-支持在线评测】10.19京东秋招(已改编)-三语言题解
    ......
  • 【秋招笔试-支持在线评测】10.19小米秋招(已改编)-研发岗题解
    ......
  • [20241024] T3 题解
    细节挺多的。题意有一个长度为\(n\)的数组\(a\)和一个长度为\(m\)的队列\(q\),初始时\(q\)中的元素和为\(0\)。对\(x=1,2,\cdots,n\)进行如下操作:如果队首元素\(q_1<a_x\),则\(q\)弹出队首,将\(a_x\)插入队尾。在操作结束后,定义数组\(a\)的权值为\(q\)......
  • 2024 ICPC Asia Taiwan Online Programming Contest题解记录
    比赛链接:https://codeforces.com/gym/105383/problemA.AnimalFarm找个最大pig,然后所有比他小的其他种类生物一直加就好了#include<bits/stdc++.h>usingnamespacestd;typedeflonglongll;constllmod=1e9+7;llksm(llx,lly){ llans=1; while(y) { if(y&1)......
  • P10233 [yLCPC2024] A. dx 分计算 题解
    题目大意:题目传送门共\(T\)组测试数据,每组数据给定一个字符串\(s\)和\(Q\)次询问,按照特定的赋值方式,每次询问\(l\)到\(r\)间按这样的赋值方式的总和是多少。赋值方式如下:P可得3分p可得2分G可得1分其余字符不得分题目分析:前置知识:前缀和。(没有学过的可以先......
  • 题解:AT_abc376_c [ABC376C] Prepare Another Box
    很好的一道二分答案题。听说CSP考前写tj可以让rp+=inf?注:下文中\(w\)指物品重量序列,\(x\)指箱子容量序列。先问个问题:为什么我上来就敢肯定这是个二分答案题?或者说,单调性在哪儿?非常简单:如果一个盒子的容量越大,能装下的东西就更多(废话)。那么如果\(v\)不够用,可以扩......
  • 牛客小白月赛102
    A题题目描述给定一组数,找出这组数的子序列中有一个包含从1~n的所有数字(此处子序列是从最初序列通过去除某些元素但不破坏余下元素的相对位置(在前或在后)而形成的新序列)用map记录每个数出现与否,再判断是否满足题意代码#include<bits/stdc++.h>usingnamespacestd;intT,n,k,......
  • 【学校训练记录】10月个人训练赛4个人题解
    A:要使s,t相等只要互相删除对方没有的字母即可,即找到a-z字母拥有最少的#include<bits/stdc++.h>#defineendl"\n"#defineintlonglongusingnamespacestd;strings1,s2;inta1[30],a2[30];voidsolve(){ cin>>s1>>s2; for(inti=0;i<s1.size(......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......
  • 【洛谷 P1116】车厢重组 题解(模拟+冒泡排序)
    车厢重组题目描述在一个旧式的火车站旁边有一座桥,其桥面可以绕河中心的桥墩水平旋转。一个车站的职工发现桥的长度最多能容纳两节车厢,如果将桥旋转度,则可以把相邻两节车厢的位置交换,用这种方法可以重新排列车厢的顺序。于是他就负责用这座桥将进站的车厢按车厢号从小到大排列。他......