如何在给定范围内求C中的素数之和?
我对编程非常陌生,有人要求我使用如何在给定范围内求C中的素数之和?,c,logic,primes,C,Logic,Primes,我对编程非常陌生,有人要求我使用while循环查找给定范围内的素数之和。如果输入是5,答案应该是28(2+3+5+7+11)。我试着写代码,但逻辑似乎不正确 代码 #include <stdio.h> int main() { int range,test; int sum = 2; int n = 3; printf("Enter the range."); scanf("%i",range); while (range > 0
while
循环查找给定范围内的素数之和。如果输入是5,答案应该是28(2+3+5+7+11)
。我试着写代码,但逻辑似乎不正确
代码
#include <stdio.h>
int main()
{
int range,test;
int sum = 2;
int n = 3;
printf("Enter the range.");
scanf("%i",range);
while (range > 0)
{
int i =2;
while(i<n)
{
test = n%i;
if (test==0)
{
goto end;
}
i++;
}
if (test != 0)
{
sum = sum + test;
range--;
}
end:
n++;
}
printf("The sum is %i",sum);
return 0;
}
#include <stdio.h>
int main()
{
int i, j, n, isPrime, sum=0;
/*
* Reads a number from user
*/
printf("Find sum of all prime between 1 to : ");
scanf("%d", &n);
/*
* Finds all prime numbers between 1 to n
*/
for(i=2; i<=n; i++)
{
/*
* Checks if the current number i is Prime or not
*/
isPrime = 1;
for(j=2; j<=i/2 ;j++)
{
if(i%j==0)
{
isPrime = 0;
break;
}
}
/*
* If i is Prime then add to sum
*/
if(isPrime==1)
{
sum += i;
}
}
printf("Sum of all prime numbers between 1 to %d = %d", n, sum);
return 0;
}
#包括
int main()
{
int范围,测试;
整数和=2;
int n=3;
printf(“输入范围”);
扫描频率(“%i”,范围);
而(范围>0)
{
int i=2;
而(i首先,在scanf
中使用&range
而不是range
scanf("%i",&range);
第二,这个说明不正确
sum = sum + test;
应该是
sum = sum + n;
还有
while (range > 0)
应改为
while (range > 1)
因为在您的算法中,您已经将范围的第一个元素放在sumsum=2
中,所以while应该循环range-1
次,而不是range
次
这就是全部首先,在scanf
中使用范围
而不是范围
scanf("%i",&range);
第二,这个说明不正确
sum = sum + test;
应该是
sum = sum + n;
还有
while (range > 0)
应改为
while (range > 1)
因为在您的算法中,您已经将范围的第一个元素放在sumsum=2
中,所以while应该循环range-1
次,而不是range
次
就这些好吧,我的C真的很糟糕,但请尝试以下代码。可能无法编译,但如果是家庭作业或其他事情,最好自己解决:
更新:按要求进行while循环
#include <stdio.h>
int main()
{
int range, test, counter, innerCounter, sum = 1;
int countPrimes = 1;
int [50] primesArray;
primesArray[0] = 1;
printf("Enter the range.");
scanf("%i",range);
counter = 2;
while (counter <= range) {
for (innerCounter = 1; innerCounter < countPrimes; innerCounter++) {
if (counter % primesArray[innerCounter] == 0)
continue;
primesArray[countPrimes + 1] = counter;
countPrimes ++;
sum += counter;
}
counter ++
}
printf("The sum is %i",sum);
return 0;
}
#包括
int main()
{
int范围,测试,计数器,内部计数器,总和=1;
int countPrimes=1;
int[50]primesArray;
primesArray[0]=1;
printf(“输入范围”);
扫描频率(“%i”,范围);
计数器=2;
虽然(counter好的,我的C真的很糟糕,但请尝试以下代码。可能无法编译,但如果是家庭作业或其他内容,您最好自己解决:
更新:按要求进行while循环
#include <stdio.h>
int main()
{
int range, test, counter, innerCounter, sum = 1;
int countPrimes = 1;
int [50] primesArray;
primesArray[0] = 1;
printf("Enter the range.");
scanf("%i",range);
counter = 2;
while (counter <= range) {
for (innerCounter = 1; innerCounter < countPrimes; innerCounter++) {
if (counter % primesArray[innerCounter] == 0)
continue;
primesArray[countPrimes + 1] = counter;
countPrimes ++;
sum += counter;
}
counter ++
}
printf("The sum is %i",sum);
return 0;
}
#包括
int main()
{
int范围,测试,计数器,内部计数器,总和=1;
int countPrimes=1;
int[50]primesArray;
primesArray[0]=1;
printf(“输入范围”);
扫描频率(“%i”,范围);
计数器=2;
while(counter我已经有一段时间没有做过C了,但是我想做一些函数来简化您的逻辑:
#include <stdio.h>
#include <math.h>
int is_prime(n) {
int i;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int range, i, sum, num_primes = 0;
printf("Enter the range: ");
scanf("%d", &range);
for (i = 2; num_primes < range; i++) {
if (is_prime(i)) {
sum += i;
num_primes++;
}
}
printf("The sum is %d", sum);
return 0;
}
#包括
#包括
int是素数(n){
int i;
对于(i=2;i我已经有一段时间没有使用C了,但我会使用一些函数来简化您的逻辑:
#include <stdio.h>
#include <math.h>
int is_prime(n) {
int i;
for (i = 2; i <= sqrt(n); i++) {
if (n % i == 0) {
return 0;
}
}
return 1;
}
int main() {
int range, i, sum, num_primes = 0;
printf("Enter the range: ");
scanf("%d", &range);
for (i = 2; num_primes < range; i++) {
if (is_prime(i)) {
sum += i;
num_primes++;
}
}
printf("The sum is %d", sum);
return 0;
}
#包括
#包括
int是素数(n){
int i;
对于(i=2;i试试这里最简单的方法。检查
代码
#include <stdio.h>
int main()
{
int range,test;
int sum = 2;
int n = 3;
printf("Enter the range.");
scanf("%i",range);
while (range > 0)
{
int i =2;
while(i<n)
{
test = n%i;
if (test==0)
{
goto end;
}
i++;
}
if (test != 0)
{
sum = sum + test;
range--;
}
end:
n++;
}
printf("The sum is %i",sum);
return 0;
}
#include <stdio.h>
int main()
{
int i, j, n, isPrime, sum=0;
/*
* Reads a number from user
*/
printf("Find sum of all prime between 1 to : ");
scanf("%d", &n);
/*
* Finds all prime numbers between 1 to n
*/
for(i=2; i<=n; i++)
{
/*
* Checks if the current number i is Prime or not
*/
isPrime = 1;
for(j=2; j<=i/2 ;j++)
{
if(i%j==0)
{
isPrime = 0;
break;
}
}
/*
* If i is Prime then add to sum
*/
if(isPrime==1)
{
sum += i;
}
}
printf("Sum of all prime numbers between 1 to %d = %d", n, sum);
return 0;
}
#包括
int main()
{
int i,j,n,isPrime,和=0;
/*
*从用户读取一个数字
*/
printf(“求1到:”)之间所有素数的和);
scanf(“%d”和“&n”);
/*
*查找1到n之间的所有素数
*/
对于(i=2;i试试这里最简单的方法。检查
代码
#include <stdio.h>
int main()
{
int range,test;
int sum = 2;
int n = 3;
printf("Enter the range.");
scanf("%i",range);
while (range > 0)
{
int i =2;
while(i<n)
{
test = n%i;
if (test==0)
{
goto end;
}
i++;
}
if (test != 0)
{
sum = sum + test;
range--;
}
end:
n++;
}
printf("The sum is %i",sum);
return 0;
}
#include <stdio.h>
int main()
{
int i, j, n, isPrime, sum=0;
/*
* Reads a number from user
*/
printf("Find sum of all prime between 1 to : ");
scanf("%d", &n);
/*
* Finds all prime numbers between 1 to n
*/
for(i=2; i<=n; i++)
{
/*
* Checks if the current number i is Prime or not
*/
isPrime = 1;
for(j=2; j<=i/2 ;j++)
{
if(i%j==0)
{
isPrime = 0;
break;
}
}
/*
* If i is Prime then add to sum
*/
if(isPrime==1)
{
sum += i;
}
}
printf("Sum of all prime numbers between 1 to %d = %d", n, sum);
return 0;
}
#包括
int main()
{
int i,j,n,isPrime,和=0;
/*
*从用户读取一个数字
*/
printf(“求1到:”)之间所有素数的和);
scanf(“%d”和“&n”);
/*
*查找1到n之间的所有素数
*/
对于(i=2;i复制粘贴自
复制-粘贴自
只是一个快速的代码质量注释-不要使用goto。使用break
代替并删除end:
,它应该像以前一样工作。我一眼就看了代码,找到了标签“end”在那里,据我记忆所及,使用标签被认为是一种不好的风格,因为它使代码修改变得非常复杂。只要删除goto标签,它就会工作。如果你需要得到素数的和,为什么你要把最后一次尝试除法的剩余部分加起来呢?(sum=sum+test)而不是(sum=sum+n)只是一个快速的代码质量注释-不要使用goto。使用break
代替并删除end:
,它应该像以前一样工作。我一眼就看了代码,找到了标签“end”在那里,据我记忆所及,使用标签被认为是一种糟糕的风格,因为它使代码修订变得非常复杂。只需删除goto标签,它就应该可以工作。如果您需要获得素数的总和,为什么要添加上一次试除的剩余部分呢?(sum=sum+test)而不是(sum=sum+n)这些天太多的python?:-)@阿尼凯特:从来没有太多的蟒蛇。@Blender,从来没有说过永不:-)最近有太多的蟒蛇吗?:-)@Aniket:从来没有太多的蟒蛇。@Blender,从来没有说过永不:-)