求各位帮看看我的代码效率怎么样,现在感觉空间太大了
查看原帖
求各位帮看看我的代码效率怎么样,现在感觉空间太大了
238203
跟你沟通楼主2023/1/3 17:38

蒟蒻不太会分析时间复杂度,代码直接把之前写的埃氏筛法套过来了

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <string.h>
int prime[1000000], n = 1000000, len;
int ratosthenes(int prime[], int n)//埃氏筛法
{
	bool* flag = (bool*)malloc(sizeof(bool) * n);
	int temp, len = 0;
	memset(flag, true, sizeof(bool) * n);
	//flag[2] = true;
	for (int i = 2; i <= n / 2 + 1; ++i)
	{
		if (!flag[i])continue;
		temp = i * 2;
		while (temp <= n)
		{
			flag[temp] = false;
			temp += i;
		}
		prime[len++] = i;
	}
	for (int i = n / 2 + 2; i <= n; ++i)
		if (flag[i])
			prime[len++] = i;
	return len;
}
int main()
{
	
	memset(prime, 0, sizeof(prime));
	len = ratosthenes(prime, n);//调用埃氏筛法
	int t,flag=0;
	scanf("%d", &t);
	for (int k = 4; k <= t; k += 2)
		for (int i = 0; i < len; ++i) {
			if (prime[i] >= len)
				break;
			for (int j = i; j < len; ++j) {
				if (prime[j] >= len)
					break;
				if (prime[i] + prime[j] == k) {
					printf("%d=%d+%d\n", k, prime[i], prime[j]);
					flag = 1;
					break;
				}
			}
			if (flag) {
				flag = 0;
				break;
			}
		}
	return 0;
}
2023/1/3 17:38
加载中...