我試圖從在線判斷系統解決一個問題。我有一個可行的解決方案,但效率不夠高。問題是這樣的:素數編碼
哪一個最少的數字n可以在產品n = a∙b中像k路一樣想象?產品a∙b和b∙a是其中一種方式,其中所有數字都是自然的(1≤k≤50)。
輸入一個數字k。 輸出一個數字n。
我的代碼沒有通過四個測試。這對k = 31,37,47來說太慢了。我一直在考慮這個問題2天,但沒有改進。這是我的代碼,請分享,如果您有任何想法。
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
int prime[10000];
long x,j,i,flag,k,length,p,checker,count,number;
int main()
{
prime[0]=2;
scanf("%ld",&k);
//I find prime numbers between 1 and 1000. 1000 can be changed, just for testing
for (i=3;i<=1000;i=i+2)
{
flag=0;
for (j=2;j<=sqrt(i);j++)
{
if(i%j==0)
{
flag=1;
break;
}
}
if(flag==0)
{
x++;
prime[x]=i;
}
}
length=x;
//this loop is too big I know, again for testing. I suspect, there must be a way to make some changes to this for loop
for (i=1;i<10000000000;i++)
{
number=i;
p=1;
for(x=0;x<=length;x++)
{
if(prime[x]>sqrt(i))
break;
count=0;
while(number%prime[x]==0)
{
number=number/prime[x];
count++;
}
p=p*(count+1);
//I find prime factors of numbers and their powers, then calculate number of divisors
}
//printf("%d\n",p);
//number of ways is just number of divisors/2 or floor (divisors/2)+1
if(p%2==0)
checker=p/2;
else
checker=floor(p/2)+1;
if(checker==k)
{
printf("%ld\n",i);
break;
}
}
return 0;
}
你的代碼壞縮進受到影響。修復它,所以它會更具可讀性。 – Maroun
@Maroun Maroun,我希望現在好了 –