[day 2]判断素数_筛选法2014.7.14

第一个问题是struct总是忘记加分号...

今天语法问题就少了很多的嘛

OMLDGG!!!又是两个小时过去了改起代码完全停不住手好嘛TOT

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

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

struct prime{
	int value;//要判断数的值
	bool flag;//1素数,0合数
};

int main(){
	int a,b;//下界,上界
	cin >> a;
	cin >> b;
	if(a < 2){
        a = 2;//去掉必不为素数的0,1
	}

	//============创建数组============
	int length = (b-a)/2+1;//数组长度
	struct prime Prime[length];
	if(a%2 == 0){
        int i = 0;//数组下标
        if(a == 2){
            Prime[i].value = 2;
            Prime[i].flag = 1;
            i++;
        }
        for(int j = a+1;j <= b;j = j+2){
            Prime[i].value = j;
            Prime[i].flag = 1;
            i++;
        }
		if(i = length-1)
			Prime[i].flag = 0;
	}
	else{
        int i = 0;//数组下标
        for(int j = a;j <= b;j = j+2){
            Prime[i].value = j;
            Prime[i].flag = 1;
            i++;
        }
		if(i = length-1)
			Prime[i].flag = 0;
	}

	//=========判断素数并抠去他们的倍数==========
	
	int b_half = b/2;
	for(int x = 0; Prime[x].value < b_half; x++){//筛出sqrt(b)内的素数
        for(int i = 2;i <= sqrt(Prime[x].value);i++){
            if(Prime[x].value%i == 0){
			     Prime[x].flag = 0;
		    }
		    else{
                for(int j = 3*Prime[x].value, y = x+Prime[x].value; j <= b; j = j + 2*Prime[x].value,y = y+Prime[x].value){
					if(Prime[y].value == j){
						Prime[y].flag = 0;//去掉倍数
					}
                }
		    }
	    }
	}

	//========终于可以显示啦==========

	int judge = 1;//判断换行
	for(int x = 0; x < length; x++){
	    if(Prime[x].flag){
            cout << Prime[x].value << ',';
            judge++;
	    }
	    if(judge%5 == 0)
	        cout << endl;
	}
	
	return 0;
}

还有一个逻辑问题没有改, 是关于筛选参数的设定的,好像还是应该分开两个循环, 先找素数, 再筛选, 不然下界大的话就只判断了前半部分素数

然后换行有点问题, 初值给0应该

明天继续....为什么要手贱的把题目设置成上下界....像大家学习只输入上界不好嘛....

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,以下是代码实现: ```python # (1) 读取 PRSA data 2010.1.1-2014.12.31. csv 文件,查看前3行、后2行 import pandas as pd df = pd.read_csv('PRSA_data_2010.1.1-2014.12.31.csv') print(df.head(3)) # 查看前3行 print(df.tail(2)) # 查看后2行 # (2) 删除列 DEWP、TEMP、PRES、cbwd、Iws、Is、Ir,丢弃缺失值并导出到新的 csv 文件 df.drop(columns=['DEWP', 'TEMP', 'PRES', 'cbwd', 'Iws', 'Is', 'Ir'], inplace=True) df.dropna(inplace=True) df.to_csv('pm25_data_2010.1.1-2014.12.31.csv', index=False) # (3) 选择 pm2.5 大于 300 的数据集并导出到文本文件 df = pd.read_csv('pm25_data_2010.1.1-2014.12.31.csv') df_hazardous = df[df['pm2.5'] > 300] df_hazardous.to_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', index=False, sep=',', line_terminator='\n') # (4) 读取文本文件并转存到 Excel 文件 df_hazardous = pd.read_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', sep=',') df_hazardous.to_excel('pm25hazardous2010.1.1-2014.12.31.xlsx', index=False) # (5) 绘制柱状图并保存为 png 文件 import matplotlib.pyplot as plt df_hazardous = pd.read_csv('pm25_hazardous_data_2010.1.1-2014.12.31.txt', sep=',') month_counts = df_hazardous['month'].value_counts() day_counts = df_hazardous['day'].value_counts() hour_counts = df_hazardous['hour'].value_counts() fig, axs = plt.subplots(3, 1, figsize=(8, 12), sharex=True) fig.suptitle('PM2.5 Hazardous Data 2010.1.1-2014.12.31', fontsize=16) axs[0].bar(month_counts.index, month_counts.values, color='r') axs[0].set_ylabel('Count') axs[0].set_title('Month') axs[1].bar(day_counts.index, day_counts.values, color='g') axs[1].set_ylabel('Count') axs[1].set_title('Day') axs[2].bar(hour_counts.index, hour_counts.values, color='b') axs[2].set_xlabel('Hour') axs[2].set_ylabel('Count') axs[2].set_title('Hour') plt.xticks(range(1, 25)) plt.savefig('pm25_hazardous_month_day_hour.png', dpi=400) ``` 注意,以上代码中的文件路径需要根据实际情况修改。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值