Мне нужно подсчитать количество различных основных факторов более 2 до 100000, есть ли какой-нибудь быстрый метод, чем то, что я делаю? . т.е. 2 имеет 1 отчетливый простой множитель 2 10 имеет два различных простого фактор (2,5) 12 имеют 2 различных простой фактор (2,3) Моего код: -подсчет различных основных факторов
#include<stdio.h>
#include<math.h>
typedef unsigned long long ull;
char prime[100000]={0};
int P[10000],fact[100000],k;
void sieve()
{
int i,j;
P[k++]=2;
for(i=3;i*i<1000;i+=2)
{
if(!prime[i])
{
P[k++]=i;
for(j=i*i;j<100000;j+=i+i)
prime[j] = 1;
}
}
for(i=1001;i<100000;i+=2)
if(!prime[i])
P[k++]=i;
}
int calc_fact() {
int root,i,count,j;
fact[1]=fact[2]=fact[3]=1;
for(i=4;i<=100000;i++) {
count=0;
root=i/2+1;
for(j=0;P[j]<=root;j++) {
if(i%P[j]==0)count++;
}
if(count==0) fact[i]=1;
else fact[i]=count;
}
return 0;
}
int main(){
int i;
sieve();
calc_fact();
for(i=1;i<10000;i++) printf("%d ,",fact[i]);
return 0;
}
BTW, код в ответе от @ v-delecroix работает некорректно (например, он сообщает, что 12345 имеет 4 различных простых фактора, когда он имеет 3). (PS: Я размещаю это здесь из-за системы репутации SO) – user2580621
Благодарим за ответ – alankrita