我是想从二开始递增到一百,
除数就从和被除数一样大,到小,
count为记录因数的多少
因数只有两个(则其中一个因数为1,另一个为其本身时输出)
否则因数减一,一个个试。
怎么不行,为什么试不出来值呢?
有没有神仙解释一下枯了
自学的
你题目的解答代码如下:
#include <stdio.h>
int main()
{
int a,i,count;
for (i = 2; i < 100; i++)
{
count = 0;//每测试一个数之前count因数个数都要重置为0
a = i;
for (; a>=1; a--) // a应该循环到 1
{
if (i%a == 0)
count++;
}
if (count == 2) //if要放在for循环之外
printf("%d ", i);
}
}
如有帮助,请点击我的回答下方的【采纳该答案】按钮帮忙采纳下,谢谢!
你的if嵌套关系不对,逻辑有些错误
这是改正后的代码
#include <stdio.h>
int main(int argc, char const *argv[])
{
int count;
for (int i = 0; i < 100; i++)
{
count = 0;
for (int j = 1; j <= i; j++)
{
if (i % j == 0)
{
count++;
}
}
if (count == 2)
{
printf("%d ", i);
}
}
};
有帮助望采纳~
你的思路是怎么样的,如果要满足你的需要的话,那么应该是两个循环嵌套,外循环从1遍历到100,内循环用来判断是否是素数
你代码输出的条件是count==2或a=1,但是由于a只能>=i,所以i%a==0最多只能有一次,所以count最大只能是1,其次,一开始a=i=2,后面a只能增大,所以不可能a=1的,所以都不满足输出的条件,所以没有输出
我来给你个思路,我觉得思路还是比直接给你代码要好的多,要养成自己动手的好习惯。首先还是要明确问题,质数是只能对1和本身取余为零的数,明白这一点就好了,我只需要把小于这个数范围的所有数进行取余的判定,当然要舍去1和它本身,比如3,只需要判断对2取余是否为零。比如4,就要判断2和3取余是否为零。所以这个程序应该最开始打印的应该是1和2,因为这两个数很明显不适合上面说的判定,况且只有两个数,干脆就直接输出。此时你应该定义一个变量从3开始累加,每加一次就应该对其进行质数的判定,如果取余为零,这个数终止判定,累加进下一个数继续判定,如果取余最后不为零,打印这个数,也应提前定义一个变量累加来保存质数个数。如果你懂数据结构的话,可以先除2在判定,当然这无所谓
虽然你的代码比较糟糕(没有优化),但是估计只有我知道你的思路没有问题,你错误在于count在每次大循环之后,要清零。把count=0写在第一个for的里面就可以了。
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!