C++ 所有不同素数的和等于100
我有一个家庭作业要写一个代码,它发现所有不同素数的和等于100。我为两个元素的求和编写了这段代码,但我不知道如何对更多元素进行迭代。它必须用c++/clr编写。如果你能帮助我,我会很高兴的C++ 所有不同素数的和等于100,c++,numbers,clr,equals,C++,Numbers,Clr,Equals,我有一个家庭作业要写一个代码,它发现所有不同素数的和等于100。我为两个元素的求和编写了这段代码,但我不知道如何对更多元素进行迭代。它必须用c++/clr编写。如果你能帮助我,我会很高兴的 #include "stdafx.h" using namespace System; using namespace System::Collections::Generic; int main(array<System::String ^> ^args) { List<int>
#include "stdafx.h"
using namespace System;
using namespace System::Collections::Generic;
int main(array<System::String ^> ^args)
{
List<int> ^primes = gcnew List<int>();
primes->Add(2);
primes->Add(3);
for (int i = 3; i < 100; i++)
{
double square = Math::Sqrt(i);
for (int j = 2; j <= square ; j++)
{
if(i%j == 0)break;
else if (j == Math::Floor(square))primes->Add(i);
}
}
int primesQuantity = primes->Count;
int s = 0;
for (int i = 0; i < primesQuantity; i++)
{
for (int k = 0; k < primesQuantity; k++)
{
if (i != k)
{
s = primes[i] + primes[k];
if (s == 100)
{
Console::WriteLine("{0}+{1}=" + s, primes[i], primes[k]);
}
}
}
}
Console::ReadKey();
}
#包括“stdafx.h”
使用名称空间系统;
使用命名空间System::Collections::Generic;
int main(数组^args)
{
列表^primes=gcnew List();
素数->添加(2);
素数->添加(3);
对于(int i=3;i<100;i++)
{
双平方=数学::Sqrt(i);
对于(int j=2;j加上(i);
}
}
int primesQuantity=素数->计数;
int s=0;
for(int i=0;i
我忘记了算法的名称,但想法如下:
1) 您需要生成所有可能的元素组合。这是通过使用位掩码实现的。取一个数字,然后取设置为1的读取位,例如:5=101,因此只取0和2位
2) 你把它们加起来
代码示例:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int primes[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
vector<vector<int> > res;
// Here is a binary number that contains 25 of 1.
// I used 25 because this is the number of prime number from 1 to 100
for (auto i = 0; i < 0b1111111111111111111111111; i++)
{
vector<int> group;
auto val = i;
auto bits = 0;
for (auto j = val; val; val >>= 1, ++bits)
if (val & 0x1 == 1) group.push_back(bits);
auto sum = std::accumulate(group.begin(), group.end(), 0,
[&primes](int acc, int x){return acc + primes[x];});
if (sum == 100) res.push_back(group);
}
for (auto el : res) {
for (auto ele : el)
cout << ele << " ";
cout << endl;
}
return 0;
}
以下是素数数组中元素的索引。请注意,它们从0开始
改进想法:您可以在新线程中运行循环体,因为线程之间不会相互影响我忘记了算法的名称,但想法如下: 1) 您需要生成所有可能的元素组合。这是通过使用位掩码实现的。取一个数字,然后取设置为1的读取位,例如:5=101,因此只取0和2位 2) 你把它们加起来 代码示例:
#include <iostream>
#include <algorithm>
#include <vector>
using namespace std;
int main()
{
int primes[] = {2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83,89,97};
vector<vector<int> > res;
// Here is a binary number that contains 25 of 1.
// I used 25 because this is the number of prime number from 1 to 100
for (auto i = 0; i < 0b1111111111111111111111111; i++)
{
vector<int> group;
auto val = i;
auto bits = 0;
for (auto j = val; val; val >>= 1, ++bits)
if (val & 0x1 == 1) group.push_back(bits);
auto sum = std::accumulate(group.begin(), group.end(), 0,
[&primes](int acc, int x){return acc + primes[x];});
if (sum == 100) res.push_back(group);
}
for (auto el : res) {
for (auto ele : el)
cout << ele << " ";
cout << endl;
}
return 0;
}
以下是素数数组中元素的索引。请注意,它们从0开始
改进思路:您可以在一个新线程中运行循环体,因为线程之间不会相互影响您了解了循环体吗?
它提出了以下问题:
Given a set of integers A and an integer s, does any non-empty subset sum to s?
在您的例子中,s==100和A=={2,3,5,7,…97}
您可以在网上找到计算所有子集的C代码(这里是您可能需要修改的代码),并将您想要的输入提供给它。您了解了吗?
它提出了以下问题:
Given a set of integers A and an integer s, does any non-empty subset sum to s?
在您的例子中,s==100和A=={2,3,5,7,…97}
您可以在网上找到计算所有子集的C代码(这里是您可能需要修改的代码),并将您想要的输入提供给它。您尝试过更简单的方法吗?就像寻找所有加起来等于8的不同正整数集一样?不幸的是,我不得不做这个项目,因为素数和等于100。因为这是我大学的一个项目……是的,我知道,但先尝试一些简单的方法是解决问题的一个很好的方法。我建议的练习可能会让你获得洞察力,从而完成你的项目。此外,数字的顺序是否重要?我的意思是,代码应该同时报告
36+64
和64+36
,还是一个就足够了?我会递归地从一个排序向量求素数之和,从最大的开始,向最小的移动。递归函数将使用索引和总和作为参数。如果总和超过100或达到向量末尾,函数将中止。Write是一个尾部递归函数,因此编译器会对其进行优化。您可能希望在另一个向量参数中跟踪构成和的数字,或者在发现它们时简单地输出它们。您尝试过更简单的方法吗?就像寻找所有加起来等于8的不同正整数集一样?不幸的是,我不得不做这个项目,因为素数和等于100。因为这是我大学的一个项目……是的,我知道,但先尝试一些简单的方法是解决问题的一个很好的方法。我建议的练习可能会让你获得洞察力,从而完成你的项目。此外,数字的顺序是否重要?我的意思是,代码应该同时报告36+64
和64+36
,还是一个就足够了?我会递归地从一个排序向量求素数之和,从最大的开始,向最小的移动。递归函数将使用索引和总和作为参数。如果总和超过100或达到向量末尾,函数将中止。Write是一个尾部递归函数,因此编译器会对其进行优化。您可能希望跟踪在另一个向量参数中构成和的数字,或者在发现它们时简单地输出它们。