永发信息网

找到所有小于2的N次方的素数,并选择其中的两个相乘得到乘积。 C语言编程

答案:3  悬赏:30  手机版
解决时间 2021-02-22 12:02
  • 提问者网友:容嬷嬷拿针来
  • 2021-02-21 15:12
我编了一半,不知道如何选择两个数相乘。求大神解答,多谢啦。
#include
#include
main()
{
int i,j,n;
printf("请输入一个正整数n: ");
scanf("%d",&n);
printf("小于%d的素数是:\n ",n);
for(i=2;i {
for(j=2;j if(i%j==0)
break;
if(i==j)
scanf("%8d\n",i);

}
}
最佳答案
  • 五星知识达人网友:行雁书
  • 2021-02-21 15:32
最后一行应该是printf("%8d\n",i);吧,题目中选择两个相乘得到乘积的意思我理解成是随意选择,而且输入的N值就得是大于1的,因为这样才会有两个以上的素数。那么可申明两个变量a和b作为选择的两个素数,m是a和b的乘积,程序如下:

#include
#include
void main()
{
int i,j,n,a=2,b,m;
double two=2;
printf("请输入一个大于1的正整数n: ");
scanf("%d",&n);
printf("小于%d的素数是:\n ",n);
two=pow(two,n);
for(i=2;i<(int)two;i++)
{
for(j=2;j {
if(i%j==0)
break;
}
if(i==j)
{
printf("%8d\n",i);
b=a;
a=i; //这样a和b是所有素数中的最后两个素数
}
}
m=a*b;
printf("选择的两个素数%d*%d=%d",a,b,m);

}
全部回答
  • 1楼网友:長槍戰八方
  • 2021-02-21 17:11
最好每次求出 素数 时,把他们保存在一个数组中,然后 在数组中随机 取出来来个。
  • 2楼网友:山有枢
  • 2021-02-21 15:43
举个例子可能好懂一些。 首先要明白,其实n个不同的素数的乘积的约数,就是这n个不同的素数自己本身以及这n个不同素数间的相互的乘积。 例如3个不同的素数3、5、7的乘积105的约数就是3、5、7、3*5、5*7、3*7这六个数。 可以验证一下,2^3-2=6,刚好等于六,题设成立。 楼主可以自己再举一些例子,都是满足这个规律的。 那么我们如何用二进制的思想去证明呢? 其实我们可以把上面这3个素数看成是3位的二进制数的三个位,这个3位的二进制数第0位对应7,第1位对应5,第2位对应3。如下图: 0 0 0 ↓ ↓ ↓ 3 5 7 当约数中出现了该素数,对应的二进制位为1,没有出现的素数对应的二进制位为0. 我们看回我们的六个约数:3、5、7、3*5、5*7、3*7。 这样,约数3对应的二进制是100,约数5对应的二进制是010,约数7对应的二进制是001 3*5是110,5*7是011,3*7是101。 这样,因为一个n位的二进制一共有2^n那么多个数,又由于某个数的约数不算0和自己本身,即没有000和举个例子可能好懂一些。 首先要明白,其实n个不同的素数的乘积的约数,就是这n个不同的素数自己本身以及这n个不同素数间的相互的乘积。 例如3个不同的素数3、5、7的乘积105的约数就是3、5、7、3*5、5*7、3*7这六个数。 可以验证一下,2^3-2=6,刚好等于六,题设成立。 楼主可以自己再举一些例子,都是满足这个规律的。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯