1623 CF776B Sherlock and His Girlfriend(LOJ10201 CF776B 普及/提高-) 线性筛 特判

博客内容涉及线性筛法在解决特定问题时的应用,通过特判处理n=1和n=2的情况,实现了AC(Accepted)的代码。线性筛法用于标记质数和合数,题目要求质因数与倍数颜色不同,最终代码展示并指出题目的简单性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

总目录

在线测评地址(ybt)

在线测评地址(LOJ)

在线测评地址(LUOGU)

1.线性筛 特判

ybt

通过

测试点结果内存时间
测试点1答案正确616KB2MS
测试点2答案正确616KB2MS
测试点3答案正确616KB1MS
测试点4答案正确620KB1MS
测试点5答案正确624KB2MS
测试点6答案正确624KB2MS
测试点7答案正确632KB2MS
测试点8答案正确1048KB6MS
测试点9答案正确1044KB6MS
测试点10答案正确764KB3MS

LOJ

该题有一个问题,样例给的范围太小,让人难以弄明白问题所在,在想质数都标记1,合数都标记2,不就好了吗,真实题意肯定不是如此。

先按上述编了再说, 很快AC通过。

题目好废啊:

毕竟只需要质因数与倍数之间的颜色不同; 那么很容易就知道一共就只有两个颜色; 一个颜色用了涂质数的; 一个涂非质数的; 反正好废啊!

线性筛 特判 代码如下:

#include <bits/stdc++.h>
#define maxn 100010
using namespace std;
int b[maxn],prime[maxn],tot=0;
void linear(int x){
	int i,j;
	for(i=2;i<=x;i++)b[i]=0;
	for(i=2;i<=x;i++){
		if(b[i]==0)prime[++tot]=i;
		for(j=1;j<=tot&&i*prime[j]<=x;j++){
			b[i*prime[j]]=1;
			if(i%prime[j]==0)break;
		} 
	}
}
int main(){
	int n,i;
	scanf("%d",&n);
	if(n==1){//特判 
		printf("1\n1\n");
		return 0;
	}
	if(n==2){//特判 
		printf("1\n1 1\n");
		return 0;
	}
	linear(n+1);
	printf("2\n");
	printf("1");
	for(i=3;i<=n+1;i++){
		if(b[i]==0)printf(" 1");
		else printf(" 2");
	}
	printf("\n");
	return 0;
} 

该题习得什么?主要还是n=1,n=2时的特判吧。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值