[day 3]判断素数_筛选法_指定范围内2014.7.16

本文探讨了在编程中实现功能后进行优化的重要性。通过实例展示了如何使用Eratosthenes筛法判断指定范围内素数,并优化了算法效率。文章强调了在实际应用中,合理选择优化策略能显著提高程序性能。

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

好开森~

不随便优化之后~

//Method_2_Eratosthenes.cpp
//判断a到b范围内的素数(包含上下界)
//从小到大扣掉素数的倍数
//Input a,b (正整数)
//Output q,w,e,...(范围内素数,逗号分格,每5个一行)

#include <iostream>
#include <cmath>
using namespace std;

int main(){
	//input
	int a,b;
	cin >> a >> b;
	//创建储存判断结果的数组
	bool prime[b+1];
	memset(prime,true,sizeof(prime));
	prime[0] = 0;
	prime[1] = 0;
	//判断素数
	int b_sqrt_2 = sqrt(b)*2;
	for(int j = 4;j <  b_sqrt_2;j++){
		for(int i = 2;i <= sqrt(j);i++){
			if(j%i == 0){
				prime[j]=0;//存在非1非n可整除,非素数
				break;
			}
		}
	}
	//筛选
	for(int j = 2;j <  b_sqrt_2;j++){
		if(prime[j]){
			for(int i = j+j; i <= b;i = i+j){
				prime[i]=0;
			}
		}
	}
	
	//===========显示============
	int judge = 0;//判断换行
	for(int x = a; x <= b; x++){
	    if(prime[x]){
            cout << x << ',';
            judge++;
			if(judge%5 == 0)
				cout << endl;
	    }
	}

	return 0;
}

这个故事告诉我们要把功能先完成再说优化, 每种优化的经验之谈都是有特定语境的, 不注意的话简直是自我折磨....

然后判断素数的上界根号乘了2,因为比如上界是一百的话很多数会筛不掉,诸如22,33,....上界越大应该越没有问题啦~

还有我觉得我有一段时间再也不想看见素数了.....

好吧明天还是要继续面对面.....先把day2 的算法改正常, 为了实践应用仙贝们的经验优化, 还是宽容的贱贱的把题目改掉好啦~~~2333~

我可以帮您解决关于Python的问题,但是您提出的问题涉及到数据处理和可视化,需要使用Python的相关库进行实现。以下是您提出的问题的解答: (1)读取 PRSA_ data 2010.1.1-2014.12.31.csx 文件并查看前3行、后2行代码: ```python import pandas as pd data = pd.read_csv(&#39;PRSA_data_2010.1.1-2014.12.31.csv&#39;) print(data.head(3)) # 查看前3行 print(data.tail(2)) # 查看后2行 ``` (2)删除列 DEWP、TEMP、PRES、cbwd、Iws、Is、Ir,并将剩余列用 pandas 数据预处理模块将缺失值丢弃处理,并导出到新的 csv 文件 pm25_ data 2010.1.1-2014.12.31.csv。 ```python data = data.drop(columns=[&#39;DEWP&#39;, &#39;TEMP&#39;, &#39;PRES&#39;, &#39;cbwd&#39;, &#39;Iws&#39;, &#39;Is&#39;, &#39;Ir&#39;]) data = data.dropna() # 删除缺失值 data.to_csv(&#39;pm25_data_2010.1.1-2014.12.31.csv&#39;, index=False) # 导出为新的 csv 文件 ``` (3)选择字段 pm2.5 大于300的所有数据集,导出为文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt。 ```python hazardous_data = data[data[&#39;pm2.5&#39;] > 300] hazardous_data.to_csv(&#39;pm25_hazardous_data_2010.1.1-2014.12.31.txt&#39;, sep=&#39;,&#39;, index=False, header=False, line_terminator=&#39;\n&#39;) ``` (4)将文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt 转存到 Excel 文件 pm25_hazardous_data_2010.1.1-2014.12.31.xlsx。 ```python hazardous_data = pd.read_csv(&#39;pm25_hazardous_data_2010.1.1-2014.12.31.txt&#39;, header=None) hazardous_data.to_excel(&#39;pm25_hazardous_data_2010.1.1-2014.12.31.xlsx&#39;, index=False, header=False) ``` (5)重新读取文本文件 pm25_hazardous_data_2010.1.1-2014.12.31.txt,分别统计出现最多的 month、day、hour,并将 month、day、hour 的出现频次用柱状图显示,并将结果保存为 png 图片保存,分辨率为 400 dpi,png 图片命名分别为 pm25_hazardous_month_day_hour.png。 ```python import matplotlib.pyplot as plt hazardous_data = pd.read_csv(&#39;pm25_hazardous_data_2010.1.1-2014.12.31.txt&#39;, header=None, names=[&#39;year&#39;, &#39;month&#39;, &#39;day&#39;, &#39;hour&#39;, &#39;pm2.5&#39;]) month_count = hazardous_data[&#39;month&#39;].value_counts() day_count = hazardous_data[&#39;day&#39;].value_counts() hour_count = hazardous_data[&#39;hour&#39;].value_counts() fig, (ax1, ax2, ax3) = plt.subplots(1, 3, figsize=(15, 5)) month_count.plot(kind=&#39;bar&#39;, ax=ax1, color=&#39;r&#39;) ax1.set_xlabel(&#39;Month&#39;) ax1.set_ylabel(&#39;Frequency&#39;) ax1.set_title(&#39;PM2.5 Hazardous Month Count&#39;) ax1.set_xticklabels(month_count.index, rotation=0) day_count.plot(kind=&#39;bar&#39;, ax=ax2, color=&#39;g&#39;) ax2.set_xlabel(&#39;Day&#39;) ax2.set_ylabel(&#39;Frequency&#39;) ax2.set_title(&#39;PM2.5 Hazardous Day Count&#39;) ax2.set_xticklabels(day_count.index, rotation=0) hour_count.plot(kind=&#39;bar&#39;, ax=ax3, color=&#39;b&#39;) ax3.set_xlabel(&#39;Hour&#39;) ax3.set_ylabel(&#39;Frequency&#39;) ax3.set_title(&#39;PM2.5 Hazardous Hour Count&#39;) ax3.set_xticklabels(hour_count.index, rotation=0) plt.savefig(&#39;pm25_hazardous_month_day_hour.png&#39;, dpi=400) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值