首页 > 其他分享 >数的拆分

数的拆分

时间:2023-03-01 18:44:53浏览次数:34  
标签:质因数 int 质数 mid 三次方 拆分 x1

 

 

思路:一定能拆成 x1的二次方,x2的三次方。当把数分解成质因数乘积后,如果有单独的质数,一定不合理, 也就是说如果有质因数,每种质因数最低有两个 ,从而如果同意质因数大于2且为偶数 ,就可以合成两个荷和数,放x1中,如果为奇数,先拿出三个,放入x2中,剩下的放入x1中。 这里需要用质数筛预处理4000以内的质数。因为剩余n只能为之后质数的3次方或二次方,并且如果成立(yes),必然只存在一种质因数,且不超三次方,只需要check一下就好了。
点击查看代码
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=4000+7;
bool p[N];
int prime[N],idx=0;
void init()
{
	for(int i=2;i<N;i++)
	{
		if(!p[i]) prime[++idx]=i;
		for(int j=1;j<=idx&&prime[j]*i<N;j++)
		{
			p[prime[j]*i]=true;
			if(i%prime[j]==0) break;
		}
	}
}
bool check(ll x)
{
	ll l=1,r=1e9;
	while(l<r)
	{
		ll mid=(l+r)>>1;
		if(mid*mid<x)
		{
			l=mid+1;
		}
		else
		{
			r=mid;
		}
	}
	if(l*l==x) return true;
	 l=1,r=1e6;
	while(l<r)
	{
		ll mid=(l+r)>>1;
		if(mid*mid*mid<x)
		{
			l=mid+1;
		}
		else
		{
			r=mid;
		}
	}
	if(l*l*l==x) return true;
	return false;
}
int main()
{
	ios:;sync_with_stdio(0);
	cin.tie(0);
	init();
//	cout<<idx<<endl;
//	for(int i = 1; i<=idx;i++)
//	cout<<prime[i]<<" ";
	int t;
	long long n;
	cin>>t;
	int flag;
	while(t--)
	{
		cin>>n;
		flag=0;
		for(int i=1;i<=idx;i++)
		{
			int t=0;
			while(!(n%prime[i]))
			{
				n=n/prime[i];
				t++;
			}
			if(t==1) 
			{
				flag=1;
				break;
			}
		}
		if(!flag&&check(n))
		{
			cout<<"yes\n";
		}
		else cout<<"no\n";
		
	}
	return 0;
}

标签:质因数,int,质数,mid,三次方,拆分,x1
From: https://www.cnblogs.com/xxj112/p/17169317.html

相关文章

  • 字符串根据逗号拆分转list
    Stringpath="123,456,789"if(path!=null&&path.indexOf(",")!=-1){String[]array=path.split(",");List<String>list=Arrays.asList(array);}/***逗号......
  • linux环境中,如何将一个大文件拆分成多个小文件?
    背景及需求说明: 要对主机上的数据进行迁移,压缩完成之后,发现有将近500G大小的数据,然后没有其他的磁盘了,其他的主机上的空间,也都只有200G左右,所以这个时候......
  • 单词拆分(字典树、记忆化搜索)、字母异位词分组(哈希表、字符串)、定义一个类Generator
    单词拆分(字典树、记忆化搜索)给定一个非空字符串s和一个包含非空单词的列表wordDict,判定s是否可以被空格拆分为一个或多个在字典中出现的单词。说明:拆分时可以重......
  • 前端小案例——拆分字符串中多个数字和文字
    1<!--*示例:2016027马红旗22*处理结果:2016027-马红旗2-->3<htmllang="en">45<head>6<metacharset="UTF-8">7<metahttp-equiv="X-UA-Co......
  • 力扣343 整数拆分
    题目:给定一个正整数n,将其拆分为k个正整数的和(k>=2),并使这些整数的乘积最大化。返回你可以获得的最大乘积。示例:输入:n=2输出:1解释:2=1+1,1......
  • 微服务拆分治理最佳实践
    作者:京东零售徐强黄威张均杰背景部门中维护了一个老系统,功能都耦合在一个单体应用中(300+接口),表也放在同一个库中(200+表),导致系统存在很多风险和缺陷。经常出现问题:如......
  • HTTP拆分响应攻击
    HTTP拆分响应攻击CRLF指的是回车符(CR,ASCII13,\r,%0d)和换行符(LF,ASCII10,\n,%0a)的简称(\r\n)。在HTTP报文中,HTTPHeader每个字段以一个CRLF分隔;HTTPHeader与HTTPBody以两个C......
  • 微服务拆分治理最佳实践
    作者:京东零售徐强黄威张均杰背景部门中维护了一个老系统,功能都耦合在一个单体应用中(300+接口),表也放在同一个库中(200+表),导致系统存在很多风险和缺陷。经常出现问题......
  • leetcode 139. 单词拆分
    递归暴力超时#include<iostream>#include<vector>usingnamespacestd;classSolution{public:boolwordBreak(strings,vector<string>&wordDict){......
  • obj c car 各类已拆分(此程序不符合内存管理规则)
    xcode4.2未了把代码看清楚,拆分main.m:////main.m//carDemo////CreatedbyWundermanon12-1-3.//Copyright(c)2012年__MyCompanyName__.Allrightsreserved./......