❶ 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,第一次循環就算出結果,結束了。