prime counting/质数计算

public class Prime {

	public int getPrime(int num){
		boolean isprime[] = new boolean[num+1];
		int count =0 ; 
		for(int i=0; i<num+1; i++){
			isprime[i] = true;
		}
		for(int i=2; i*i< num+1; i++){
			if(isprime[i] == true){
				for(int j=i; j*i<num+1; j++){
					isprime[j*i] = false;
				}
			}
		}
		for(int i=2; i<num+1; i++){
			if(isprime[i] == true) count++; 
		}
		return count;
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		System.out.println(new Prime().getPrime(1000)); //should be 168
	}

}


思路:

   通过不断将质数的整数倍得到的结果标记为非质数来实现。这里使用了 Sieve of Eratosthenes















#include <stdio.h> #include <stdlib.h> #include <time.h> // 鸡兔同笼问题函数 void chicken_rabbit_problem(int heads, int legs) { int chickens, rabbits; for (chickens = 0; chickens <= heads; chickens++) { rabbits = heads - chickens; if (2 * chickens + 4 * rabbits == legs) { printf("鸡兔同笼问题:鸡有 %d 只,兔有 %d 只\n", chickens, rabbits); return; } } printf("鸡兔同笼问题无解\n"); } // 约瑟夫环问题函数 void josephus_problem(int n, int k) { int *people = (int *)malloc(n * sizeof(int)); for (int i = 0; i < n; i++) { people[i] = i + 1; } int index = 0; int count = n; printf("约瑟夫环问题:当 n=%d,k=%d 时,出列顺序为 ", n, k); while (count > 0) { index = (index + k - 1) % count; printf("%d ", people[index]); for (int i = index; i < count - 1; i++) { people[i] = people[i + 1]; } count--; } printf("\n"); free(people); } // 埃氏筛法函数 void sieve_of_eratosthenes(int n) { int *is_prime = (int *)calloc(n + 1, sizeof(int)); for (int i = 2; i <= n; i++) { is_prime[i] = 1; } for (int p = 2; p * p <= n; p++) { if (is_prime[p]) { for (int i = p * p; i <= n; i += p) { is_prime[i] = 0; } } } printf("埃氏筛法:小于等于 %d 的素数有 ", n); for (int p = 2; p <= n; p++) { if (is_prime[p]) { printf("%d ", p); } } printf("\n"); free(is_prime); } // 计数排序函数 void counting_sort(int arr[], int size) { if (size <= 0) return; int max_val = arr[0]; int min_val = arr[0]; for (int i = 1; i < size; i++) { if (arr[i] > max_val) { max_val = arr[i]; } if (arr[i] < min_val) { min_val = arr[i]; } } int range = max_val - min_val + 1; int *count = (int *)calloc(range, sizeof(int)); int *output = (int *)malloc(size * sizeof(int)); for (int i = 0; i < size; i++) { count[arr[i] - min_val]++; } for (int i = 1; i < range; i++) { count[i] += count[i - 1]; } for (int i = size - 1; i >= 0; i--) { output[count[arr[i] - min_val] - 1] = arr[i]; count[arr[i] - min_val]--; } for (int i = 0; i < size; i++) { arr[i] = output[i]; } printf("计数排序:排序后的数组为 "); for (int i = 0; i < size; i++) { printf("%d ", arr[i]); } printf("\n"); free(count); free(output); } // 主函数 int main() { // 鸡兔同笼问题测试 int heads = 35; int legs = 94; chicken_rabbit_problem(heads, legs); // 约瑟夫环问题测试 int n = 10; int k = 3; josephus_problem(n, k); // 埃氏筛法测试 int limit = 30; sieve_of_eratosthenes(limit); // 计数排序测试 int arr[] = {4, 2, 2, 8, 3, 3, 1}; int size = sizeof(arr) / sizeof(arr[0]); counting_sort(arr, size); return 0; }
10-17
#include <iostream> #include <vector> #include <algorithm> // 添加 max_element 和 min_element 依赖 #include <cmath> using namespace std; // 1. 鸡兔同笼 bool chicken_rabbit(int heads, int legs, int &chickens, int &rabbits) { if (legs % 2 != 0 || legs < 2 * heads || legs > 4 * heads) return false; rabbits = (legs - 2 * heads) / 2; chickens = heads - rabbits; return (rabbits >= 0 && chickens >= 0); } // 2. 约瑟夫环 int josephus(int n, int m) { if (n == 1) return 0; return (josephus(n - 1, m) + m) % n; } // 3. 埃氏筛法 vector<int> sieve_of_eratosthenes(int n) { vector<bool> is_prime(n + 1, true); is_prime[0] = is_prime[1] = false; for (int i = 2; i <= sqrt(n); ++i) { if (is_prime[i]) { for (int j = i * i; j <= n; j += i) is_prime[j] = false; } } vector<int> primes; for (int i = 2; i <= n; ++i) if (is_prime[i]) primes.push_back(i); return primes; } // 4. 计数排序 vector<int> counting_sort(const vector<int>& arr) { if (arr.empty()) return {}; int max_val = *max_element(arr.begin(), arr.end()); int min_val = *min_element(arr.begin(), arr.end()); int range = max_val - min_val + 1; vector<int> count(range), output(arr.size()); for (int num : arr) count[num - min_val]++; for (int i = 1; i < range; ++i) count[i] += count[i - 1]; for (int i = arr.size() - 1; i >= 0; --i) { output[count[arr[i] - min_val] - 1] = arr[i]; count[arr[i] - min_val]--; } return output; } int main() { // 测试鸡兔同笼 int heads = 35, legs = 94; int chickens, rabbits; if (chicken_rabbit(heads, legs, chickens, rabbits)) { cout << "鸡:" << chickens << " 只,兔:" << rabbits << " 只" << endl; } else { cout << "无解" << endl; } // 测试约瑟夫环 int n = 7, m = 3; cout << "幸存者编号:" << josephus(n, m) + 1 << endl; // 测试埃氏筛法 int max_num = 30; vector<int> primes = sieve_of_eratosthenes(max_num); cout << "素数:"; for (int p : primes) cout << p << " "; cout << endl; // 测试计数排序 vector<int> arr = {4, 2, 2, 8, 3, 3, 1}; vector<int> sorted = counting_sort(arr); cout << "排序结果:"; for (int num : sorted) cout << num << " "; return 0; }这段代码的结果图。
03-21
数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究(Matlab代码实现)内容概要:本文围绕“数据驱动的两阶段分布鲁棒(1-范数和∞-范数约束)的电热综合能源系统研究”展开,提出了一种结合数据驱动与分布鲁棒优化方法的建模框架,用于解决电热综合能源系统在不确定性环境下的优化调度问题。研究采用两阶段优化结构,第一阶段进行预决策,第二阶段根据实际场景进行调整,通过引入1-范数和∞-范数约束来构建不确定集,有效刻画风电、负荷等不确定性变量的波动特性,提升模型的鲁棒性和实用性。文中提供了完整的Matlab代码实现,便于读者复现和验证算法性能,并结合具体案例分析了不同约束条件下系统运行的经济性与可靠性。; 适合人群:具备一定电力系统、优化理论和Matlab编程基础的研究生、科研人员及工程技术人员,尤其适合从事综合能源系统、鲁棒优化、不确定性建模等相关领域研究的专业人士。; 使用场景及目标:①掌握数据驱动的分布鲁棒优化方法在综合能源系统中的应用;②理解1-范数和∞-范数在构建不确定集中的作用与差异;③学习两阶段鲁棒优化模型的建模思路与Matlab实现技巧,用于科研复现、论文写作或工程项目建模。; 阅读建议:建议读者结合提供的Matlab代码逐段理解算法实现细节,重点关注不确定集构建、两阶段模型结构设计及求解器调用方式,同时可尝试更换数据或调整约束参数以加深对模型鲁棒性的理解。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值