首页 > 其他分享 >暑假集训D6 2023.7.29 补题

暑假集训D6 2023.7.29 补题

时间:2023-07-29 21:12:40浏览次数:47  
标签:10 int 质数 29 times leq 因子 2023.7 补题

原比赛链接2022年华中科技大学程序设计新生赛(重现赛)
官方题解 华中科技大学 2022 新生赛(HUST FCPC 2022) 题解&滚榜
\(underset\)
\(\underset{\sim}Λ\)
\(\underset{\sim}{abcd}\)

N.Walk Alone's Conjecture

题意:给定一个整数 \(n\) ,找出两个数 \(x\) 和 \(y\) ,使得满足如下条件

  • \(y - x = n\)
  • \(x\) 和 \(y\) 的质因子个数相同.(质因子不必相同)

本题特别注意一下数据范围 \(1 \leq n \leq {10}^8\) , \(1 \leq x,y \leq 10^{10}\) .为什么要注意数据范围,后面会提到..

先介绍一下我自己的思路,然后给出官方思路.

首先容易看出,对于一个偶数,必有质因子 \(2\) ,容易得到 \(n\) 和 \(n \times 2\) 即满足题意.

否则如果不是偶数,一定就没有质因子 \(2\) ,如果再没有质因子 \(3\) ,那么 \(n \times 2\) 和 \(n \times 3\) 即为所求.

那如果还有质因子 \(3\) 该怎么办呢?

可以想到,如果再有一个质数 \(a\) , 显然 \(n\times a\) 使得该数多了 \(1\) 个质因子 , \(a+1\) 一定是偶数 ,有质因子 \(2\) ,只要 \(a+1\) 是 \(2\) 的 \(k\) 次幂即可使质因子的个数只增加 \(1\) (做题时没有考虑周全,没有考虑到 \(a+1\) 还包含了其他质因子的情况,把这题想简单了).
那么只需要找一下 \(a\) 满足

  • \(a\) 为质数且不为 \(n\) 的质因子
  • \(a+1\) 为 \(2\) 的 整数次幂

然后我就满心欢喜写了个程序,发现满足这种情况的质数并不多,由于数据范围所限,并不能乘以一个很大的质数(如 \(2147483647\) ),可惜了不然直接变水题. 好了话说回来,在 \(10^{10}\) 的范围限制下, 只有如下惨淡的几个 \(a\) 和 \(a+1\) 满足上面的条件
image
虽然数量惨淡,但是代码还得接着写

int u[7]={3,7,31,127,8191,131071,524287};


for(int i =0;i<7;i++)
{
	if(n%u[i]!=0)
	{
		cout<<n*u[i]<<" "<<n*(u[i]+1)<<endl;
		break;
	}
}

\(n\) 的量级达到了 \(8\) 次方,再乘以一个大于100的数就超过 \(10\)次方 了..

于是我又想了一招,对那些比较大的数输出一下,然后人工给他构造质因子. 只要使得乘上的乘积的质因子的个数都增大相同的数量即可.

由于我们现在讨论的是没有质因子 \(2\) ,但有质因子 \(3\) 的情况,所以一个数乘以任意个 \(2\) \(3\) 都会使得该数的质因子精确地增加 \(1\) .只用 \(2\) 或 \(3\) 的幂构造出来相差 \(1\) 是比较难的({2,3},{8,9}都满足题意,后面好像就很少了).只用 \(2\) 只能让一个数的质因子增大 \(1\), \(3\) 不能使得该数的质因子变多, 那么不妨再找一个 \(n\) 中没有的质因子,比如 \(7\) ,然后用 \(2,3,7\) 来构造两个数,使得这两个数的差只差 \(1\) 就好了.比如 \(48 = 3*16 = 3*2*2*2*2\),增加1个质因子 \(2\) , \(49 = 7\times 7\) ,增加一个质因子 \(7\) .

最后交上去还是 \(WA\) ,本地输出了一下 \(1 \sim 10^8\) 所有 \(n\) 的解,发现还是有一些达到了 \(10^{11}\) ,被卡的很难受.
解决方法也很简单,多构造几组呗..在我不断 \(WA\) ,构造, \(WA\) ,构造 的努力下..于是代码变成了如下画风.....

#include<stdio.h>
#include<iostream>
#include<algorithm>
#define pb push_back
using namespace std;
#define int long long
int u[7]={3,7,31,127,8191,131071,524287};
signed main()
{
	ios::sync_with_stdio(false);
	cin.tie(0);
	int T;
	cin>>T;
	while(T--)
	{
		int n;
		cin>>n;
		if (n % 2 == 0)
		{
			cout << n << " " << n * 2 << endl;
		}
		else if (n % 3 != 0)
		{
			cout << n * 2 << " " << n * 3 << endl;
		}
		else if (n % 3 == 0 && n % 7 != 0)
		{
			cout << n * 48 << " " << n * 49 << endl;
		}
		else if (n % 3 == 0 && n % 11 != 0)
		{
			cout<<n * 32<<" "<<n*33<<endl;
		}
		else if(n%3==0&&n%13!=0)
		{
			cout<<n * 12<<" "<<n*13<<endl;
		}
		else if(n%3==0&&n%17!=0)
		{
			cout<<n * 17<<" "<<n*18<<endl;
		}
		else if(n%3==0 &&n%19!=0)
		{
			cout<<n * 18<<" "<<n*19<<endl;
		}
		else if(n%3==0&&n%23!=0)
		{
			cout<<n*23<<" "<<n*24<<endl;
		}
		else if(n%3==0&&n%31!=0)
		{
			cout<<n*31<<" "<<n*32<<endl;
		}
		else if(n%5==0&&n%7!=0)
		{
			cout<<n * 49<<" "<<n*50<<endl;
		}
		else
		{
			for(int i =0;i<7;i++)
			{
				if(n%u[i]!=0)
				{
					cout<<n*u[i]<<" "<<n*(u[i]+1)<<endl;
					break;
				}
			}
		}
	}
	return 0;
}

最后交上去终于是 \(AC\) 了!!喜大普奔!!

然后来看一下官方标程:
image

标签:10,int,质数,29,times,leq,因子,2023.7,补题
From: https://www.cnblogs.com/oijueshi/p/17590540.html

相关文章

  • 2023.7.29 周五:接口 interface
    1//1.约束2//2.用inteface定义,不可实例化,没有构造方法3//3.用implements可实现多个接口45//接口6publicinterfaceService{//用interface定义接口78//在接口中定义的属性,都是常量publicstaticfinal9intAGE=99;10publicstatic......
  • 自学周记(7.22-7.29)
    这周结束了对教资专业课的学习,开始了对于302中学教育知识与能力的学习,掌握了很多教育学的相关知识,对教书育人有了很多新的理解。下星期应该是预备8号的科目三考试加继续对302的学习。除此之外,进行了一些对于ps的训练,以及对于python基础知识的回顾,下周争取看完老师推荐的电视剧,以......
  • 7.29
    Java正则表达式正则表达式定义了字符串的模式。正则表达式可以用来搜索、编辑或处理文本。正则表达式并不仅限于某一种语言,但是在每种语言中有细微的差别。正则表达式实例一个字符串其实就是一个简单的正则表达式,例如 HelloWorld 正则表达式匹配"HelloWorld"字符串。......
  • 2023.7.29-假期周进度报告
    本周(7.23-7.29)主要进行休息。下周准备进行天道的观看。周日,在家进行休息,完成了在家进行休息,遇到了下周准备做什么的问题,解决方法是下周的事情下周再进行考虑。周一,在家进行休息,完成了在家的休息,遇到了家里没人给我做午饭的问题,解决方法是午饭随便吃点就行。周二,进行上周学习的......
  • 7.23-7.29
    7.23今日任务:阅读《大道至简》(完成)复习高数(完成)今日听力练习(完成)今日六级单词(完成)7.24今日任务:继续学习Java(完成)今日pta练习(完成)今日听力练习(完成)今日六级单词(完成)7.25今日任务:阅读《大道至简》(完成)准备旅游7.25-7.29同家人旅游,大概八月初回来期间阅读《大道至......
  • 暑假周记(7.29)
    BigInteger适合保存比较大的整形BigDecimal适合保存精度更高的浮点型(小数)//1.在对BigInteger进行加减乘除的时候,需要使用对应的方法,不能直接进行+-*///2.可以创建一个要操作的BigInteger然后进行相应操作BigIntegeradd=bigInteger.add(bigInteger2);System.out.......
  • 2023.7.29
    今天周六了,早上吃完面继续睡了一会儿又起来打了会儿游戏,感觉有些无聊,下午和爸爸去水库钓大鱼,老爸的工友吊起来个10多斤的翘嘴,我下巴都惊掉了,胳膊大小的鱼啊,老爸也没钓到几条鱼,就回家了,晚上水煮鱼吃完就开始学习java了,今天晚上在玩一会儿就休息把。......
  • 7月29日
    今天继续学习了内部类静态内部类属于外部类自己特有的publicclassOuter{publicstaticclassInner{}}Outer.Innerin=newOuter.Inner();可以直接访问外部类的静态成员不可以直接访问外部类的实例成员......
  • 7.29 后记
    T1简单题,筛的时候记点东西T2筛完预处理下每个数最大质因数,然后暴力找路径就行T3分段打表可过,每段长\(2\times10^5\)差不多就过了正解:考虑贡献,每个因数\(i\)出现了\(\frac{n}{i}\)次T4下午......
  • Python 潮流周刊第 13 期(2023-07-29)
    查看全文:https://pythoncat.top/posts/2023-07-29-weekly......