for ( int i=1 ; i<1000;i++){ int p=0; for(int j=1; j<=i/2;j++) { if(i%j==0) p=p+j; 这是什么意思?

如题所述

这是一个循环嵌套语句。
for就是循环的意思,i = 0:表示i是从0开始循环。i< 1000:表判断,看是否在此范围内,若在,则执行下列语句,否则跳出。
i ++ :表示 i 从 0 一直递增。
第二个也是一样的意思。
这整个要求的其实是求1000以内每一个数的因数之和
温馨提示:内容为网友见解,仅供参考
第1个回答  2013-04-02
for( int i=1 ; i<1000;i++) //从1到1000循环1000次
{
int p=0; //定义整型变量并赋值p=0
for(int j=1; j<=i/2;j++) //循环i/2次
{ if(i%j==0) //如果i能被j整除,则把j累加到p上
p=p+j; //之后可能通过判断p是否为0来确定i是否是质数,如果内层循环结束后p=0,i为质数,否则为合数。

你的程序不够完整,所以不好确定完整的目的是什么,但是跟质数肯定是有关系的。

希望对你有帮助,望采纳谢谢。追问

这个是算完数的。 最后面还有一句 if(p=i)
System.out.println( i ); 我就不知道 那二个循环运行的过程, 都搞糊涂了, 希望讲讲谢谢

追答

就是首先,是1到1000的一个循环,也就是遍历1到1000的每一个数字

然后对这1~1000的每一个数再进行一次循环,循环的次数是该数的一半

比如说外层循环到i=50, 那么内层循环就是再循环50/2=25次

为什么要i/2呢,因为要求得i(这里以50举例子)的全部因子,你只要判断50(i)能不能被1~25(1到i的一半)整除,就能求得全部因子。

所以外层循环是1~1000,内层循环是为了求得1~1000中每个数字的因素之和,如果因素之和等于本身,那么就是完数咯。

希望对你有帮助,望采纳谢谢。

本回答被提问者采纳

...p=0; for(int j=1; j<=i\/2;j++) { if(i%j==0) p=p+j; 这是什么意思...
for就是循环的意思,i = 0:表示i是从0开始循环。i< 1000:表判断,看是否在此范围内,若在,则执行下列语句,否则跳出。i ++ :表示 i 从 0 一直递增。第二个也是一样的意思。这整个要求的其实是求1000以内每一个数的因数之和

C++编程,求1000以内的完数并每行按格式输出其因子:6=1+2+3
int main() { for(int i=1;i<=1000;i++) { int sum=0,a; for(int j=1;j<i;j++) if(i%j==0) { sum=sum+j;\/\/假如找到一个因子就加起来 a=j;\/\/for循环执行完后a就是最大的那个因子 } if(sum==i)\/\/判断因子之和与i是否相等 { cout<<i<<"="; for(int k=1;k<i;k++) if(...

...这个数就称为“完数”。例如6=1+2+3.编程找出1000以内的所有完数_百 ...
public static void main(String[]args){ int sum;for(int i=1;i<=1000;i++){ sum=0;for(int j=1;j<i;j++){ if(i%j==0){ sum=sum+j;} } if(i==sum){ System.out.println(i);} } } } 运行结果:

...它的因子之和,这个数就称为"完数"。例如6=1+2+3?
\/\/int factor = 0;for(int i = 1;i <= 1000;i++){ int factor = 0;for(int j = 1;j <= i\/2;j++){ if(i % j == 0){ factor += j;} } if(i == factor){ System.out.println(i);} \/\/重置factor \/\/factor = 0;} 5.外层循环控制行数 内层循环控制列数 for(int...

...i<=n;i++) { for(j=2;j<=i\/2;j++) { if(i%j==0) break; } if(j>...
1.这个内嵌的for语句,当if(i%j!=0)的时候,那个j还做j++吗?答:会,for循环的最后一部分是在昨晚所有的循环体后都会执行的。顺便说一句,如果i%j==0了之后,j++反而不会执行了,因为break已经跳出了。2.会不会跳出循环呢?这是怎么的一个原理?答:此时跳出循环的语句不是break,而是j<=...

...{ int i, j, sum; sum = 0; for (i = 1; i <= 1000; i
"sum = 0;"应放在第1个for语句的循环体中:include "stdio.h"main(){ int i, j, sum;for (i = 1; i <= 1000; i++) { sum = 0;for (j = 1; j < i; j++) { if (i % j == 0) { sum = sum + j;if (sum == i) printf("%d", sum);} } } } ...

输出1000以内的所有的完数
\/*输出1000以内的所有完数并输出其因子*\/ include<stdio.h> int main(){ int sum = 0;for (int i = 1; i <= 1000; i++){ sum = 0;for (int j = 1; j < i; j++){ if (i%j == 0){ sum = sum + j;} } if (sum == i){ printf("%d\\n", i);for (int j =...

其中for(int i=1;i<=n;i++)有什么用 for(int i=1;i<=n;i++)
不重复呀,第一个循环是从1到n,应该是分别求阶乘再求和吧,第二个循环求每一个数的阶乘。

for(int i=0;i<n;i++){ for(int j=i;j<n;j++){ ...} }的时间复杂度为多...
i++就是i自增1的意思。每次循环后i都会自动加1,直到i>=3时就退出循环。循环几次,如分别是i=0,1,2,3,4,5时执行一次printf("a[%d]=%d\\n",i,a[i]);。实例使用了嵌套循环输出2~100之间的素数如下:!\/usr\/bin\/python# -*- coding: UTF-8 -*-i = 2while(i < 100): j =...

For(i=1;i<n;i++) For(j=1;j<i;j++) For(k=1;k<j;k++) X=x+1; 算出...
中层是j从1到i-1,内层是k从1到j-1 里面的表达式是1,因为内部只有x使用了1次 于是化简为两个希格玛的嵌套公式,外层是i从1到n-1,内层是j从1到i-1 里面的表达式是1+2+...+(j-1)=j*(j-1)\/2 继续往下化简就有点麻烦了,涉及到高中数学的特殊数列的求和,你先看看这些能懂不?

相似回答