❶ c语言程序因子问题
最小因子
int m1(int a, int b)
{
int c, i;
c = a < b ? a : b;
for(i = c; i > 0; i-- )
{
if(a % i == 0 && b % i == 0)
{
return i;
break;
}
}
return -1;
}
任给两个正整数N、M,求一个最小的正整数a,使得a和(M-a)都是N的因子。
int m2(int m, int n)
{
int i;
for(i = n; i > 0; i-- )
{
if(n % i == 0 && (m - i) % i == 0)
{
return i;
break;
}
}
return -1;
}
❷ 真因子怎么求c语言
真因子c语言可以这么求:
一开始定义intm=0没必要,就是m就可以了。
循环中要定义m=0,这样,对于每一个i,m最终都得到i因子的和,然后将m与i比较,如果相等,则i是完数,输出完数i。对于下一个i,m=0的作用是将m及时恢复0,这样才能得到i因子的和,否则就是对于各个i,m的值一直累加了。
❸ c语言:求出一个整数的所有因子,一行代码没看懂,求解释
这应该是求一个数所有素数因子的一个程序,而且素数因子可以重复,实际上输出结果的结果相乘就是这个数。
这是用递归程序实现的。
shunum(int a)这个函数在输出a的第一个最小的因子后,继续调用shunum函数计算 这个数除以刚才输出的第一个最小因子的结果 的因子,然后跳出循环。比如输入60这个数,程序执行的过程是:
shunum(60) ---- 输出 2 然后调用shunum(60/2)=shunum(30);
shunum(30) --- 输出 2 然后调用shunum(30/2)=shunum(15);
shunum(15) --- 输出 3 然后调用shunum(15/3)=shunum(5);
shunum(5) --- 输出 5 然后调用shunum(5/5) = shunum(1);
shunum(1) --- for循环的条件不符合,直接返回;
执行shunum(5)的break,跳出循环,shunum(5)结束;
执行shunum(15)的break,跳出循环,shunum(15)结束;
执行shunum(30)的break,跳出循环,shunum(30)结束;
执行shunum(60)的break,跳出循环,shunum(60)结束;
可以看出,输出结果是 2 2 3 5,而2*2*3*5=60。
❹ c++因子游戏
此题思路如下。
答案的质因子表示a1^p1*a2^p2*a3^p3...*an^pn
可知a因为前n个质数,p应当递减。
由此可以搜索
❺ 质因子 C语言 编程
#include"stdio.h"
void main()
{
int i=2,n;
printf("请输入数:\n");
scanf("%d",&n);
while(i<n)
{
if(n/i==float(n/i))
{
printf("%d\t",i);
n=n/i;
if(n==1)
break;
continue;
}
i++;
}
}
❻ c语言因子分解
因为你调用的函数返回的是int型,且在没有写return的情况下返回的是1,不信你可以写一句return 0;
你输入9 出来就是3,30 了。
原先在printf中调用num()函数是没有意义的,因为你真正的输出是在调用的时候,所以直接调用。之前你在printf中调用还有一个问题,就是在写输出类型的时候用的是%d,就不可避免的输出num的返回类型。
修改的代码:
#include<stdio.h>
#include<conio.h>
int main()
{
int a;
void num(int n);
while(scanf("%d",&a)!=EOF)
{
num(a);
}
getch();
return 1;
}
void num(int n)
{
int i;
for(i=2;i<=n;i++)
{
while(n!=i)
{
if(n%i==0)
{
printf("%d ",i);
n=n/i;
}
else
{
break;
}
}
}
printf("%d",n);
}
❼ C语言 因子计算
你这里最主要的错误就是t==0,应该是t=0这样才是赋值
另外,你的输出不应该放在循环外面,还按你的模板把这两个改一下应该就能对了
也就是
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,t,n;
t=0; //就是这里要用=,==是用来判断是否相等的
scanf("%d",&n); //n为要判断的数
for(i=1;i<n;i++){
if(n%i==0)
t=i+t; //求这个数个各因子的和
}
if(t==n) //如果相等的话,要放在循环外,这样t才是所有因子的和
printf("%d",n); //打印这个数
system("pause");
return 0;
}
但是你这个程序仅仅是判断一个数n是不是完数,你给的题的意思好像要判断n以内所有的
那就要这样
#include<stdio.h>
#include<stdlib.h>
int main()
{
int i,j,t,n;
scanf("%d",&n); //n为要判断的数
for(i=1;i<=n;i++){ //此时遍历的i不为求因子,而为判断i是不是完数,这个循环内的模板与上一个程序是类似的
t=0;
for(j=1;j<i;j++)//求这个数个各因子的和,此时j用来判断是不是因子
{
if(i%j==0)
t=j+t;
}
if(i==t) //如果相等的话
printf("%d\n",i); //打印这个数,这时要一个\n回车,以区分各数
}
system("pause");
return 0;
}
❽ 编程:两人轮流说数,每说一个数x,就把x和x的因子拿出去;证明,先说的人一定会赢。
C语言神马的太复杂了。我从数学上给你一个证明吧:对于1~N这N个数,用以上游戏规则,先行者必胜。
因为1是一个很特殊的数,它是任何数的因子,所以1只能在一开始写下。
所以,我们可以先把1放一边,用剩下的2~N这N-1个数来进行这个游戏(不妨叫做“新游戏”),如果在“新游戏”中是先行者必胜,那么在原游戏中先行者就按照“新游戏”中的策略来写就行;如果在“新游戏”中是后行者必胜,那么在原游戏中先行者就先写下1,然后按照“新游戏”中后行者的策略来写,即通过先写下1来“让先”。
综合起来,先行者必胜。
接下来需要证明,对于任意k个数,按照以上游戏规则,先行者要么必胜,要么必败。
用数学归纳法证明:k=1时,对于先行者而言,当然是必胜局,结论成立。
假设对于1~n的所有自然数,结论都成立。当k=n+1时,先行者可以选择写下这n+1个数中的任意一个数,有n+1种选择。不管做哪种选择,还剩下的可写的数都小于或等于n,对于后行者来说,要么是必胜局,要么是必败局。如果对于后行者来说全部是必胜局,那么初始情况对于先行者来说是个必败局;如果至少有一种情况对于后行者来说是必败局,那么初始情况下先行者就可以做这种选择,初始情况对于先行者来说是个必胜局。所以结论也成立。
综上所述,任意k个数按照以上游戏规则,对于先行者而言,都要么是必胜局,要么是必败局。
欢迎提问。
❾ 求因子的函数(C语言)
是啊,在运行break之前,结果已经存放到m中了。
这个程序,应该加break比较好,虽然运算结果是一样的,但是有了break,运行效率会提高。
当n=100时,没有break,要循环98次,而有了break,第一次循环就算出结果,结束了。